SlideShare uma empresa Scribd logo
1 de 59
C	control	structure
Đơn giản mà đẹp
cuong@techmaster.vn
Nội dung
• đọc vào, viết ra console
• if then else
• switch
• for, while
• function
• include
• define
Đọc vào, viết ra console
• scanf
• fgets
• vòng lặp nhập lựa chọn
#include <stdio.h>
main() {
int a;
printf("Input a numbern");
scanf("%d", &a);
printf("%dn", a);
char c;
printf("Input a charactern");
scanf(" %c", &c);
printf("%cn", c);
return 0;
}
Nhập vào một số
và một ký tự từ
dòng lệnh sau đó
in ra
Sửa lỗi scanf nhận newline trước đó
scanf("%c", &c);//Nếu phía trước
người dùng gõ enter, lệnh scanf
đọc vào ký tự newline rồi không
đọc ký tự cần đọc nữa
scanf(" %c", &c);//tạo khoảng
trống tạm để bỏ qua ký tự new line
trước đó
scanf chỉ đọc vào đến ký tự space
char str[128];
scanf("%s", str);
printf("%sn", str);
Input: hello world
Output: hello
Input: hello world
Output: hello world
Hy vọng Thực tế
Cách sửa
char str[128];
char* fmt = "%[^n]%*c";
printf("Please input string:n");
scanf(fmt, str);
printf("%sn", str);
https://stackoverflow.com/questions/6083045/scanf-n-skips-the-2nd-input-but-n-does-not-why
Dùng fgets đọc vào một dòng
#define BUFF_SIZE 128
char str[BUFF_SIZE];
printf("Please input string:n");
fgets(str, BUFF_SIZE, stdin);
printf("%sn", str);
Vòng lặp nhập lựa chọn người dùng
int main() {
printf("Enter your choicen");
printf("N. Create new student recordn");
printf("S. Search student by namen");
printf("E. Edit student recordn");
printf("Q. Quitn");
// Xem trang tiếp theo
}
char c;
while (1) {
scanf(" %c",&c);
c = toupper(c);
switch (c) {
case 'N':
printf("You select Nn");
break;
case 'S':
printf("You select Sn");
break;
case 'E':
printf("You select En");
break;
case 'Q':
printf("You select Q to quitn");
return 1;
}
Enter your choice
N. Create new student record
S. Search student by name
E. Edit student record
Q. Quit
N
You select N
S
You select S
E
You select E
if then else
Cần ôn lại đại số bool
https://www.tutorialspoint.com/cprogramming/c_operators.htm
Các toán tử
• && logical AND
• || logical OR
• ! logical NOT
• !(A && B) = !A || !B
• !(A || B) = !A && !B
Nếu ưu tiên tốc độ
if (conditionA) {
} else if (conditionB) {
} else if (conditionC) {
} else {
}
Điều kiện có xác suất xảy
ra lớn nhất lên đầu,
Điều kiện có xác suất
thấp nhất cuối cùng
Nếu không đánh giá được
xác suất xảy ra thì ưu
tiên condition đơn giản
lên đầu
Bài tập
• Từ dãy số nguyên dương 0 đến 20,
hay dựng 3 mảng:
– Mảng A chứa các số chia hết cho 5
– Mảng B chứa các số chia hết cho 3
– Mảng C chứa các số chia hết cho 2
Nếu ưu tiên bảo trì, dễ hiểu
if (age < 5) {
} else if (age < 12) {
} else if (age < 20) {
} else if (age < 30) {
}
if (age < 20 && age >= 12) {
} else if (age < 12 && age >=5) {
} else if (age < 30 && age >=20)
{
} else if (age < 5) {
}
Nên Không nên
Giảm thiểu if lồng nhau quá 2 lớp
if lồng nhau 3 lớp trở lên cực khó
debug, thường xảy thiếu trường
hợp.
if (A) {
if (B) {
if (C) {
} else {
//A đúng, B đúng, C sai
}
} else {
//A đúng, B sai
if (C) {
//A đúng, B sai, C đúng
}
}
} else {
//A sai
}
Phát rồ luôn
Lý thuyết tổ hợp
• 3 điều kiện {A,B,C} thực ra có
{A,!A,B,!B,C,!C}
• Tìm ra tất cả tổ hợp có thể
{A,B,C}, {!A,B,C}, {A,!B,C},
{!A,!B,C}, {A,!B,!C},
{!A,!B,!C}...
Nếu không liệt kê tất cả các khả năng
Chi phí để gỡ rối, sửa bug sẽ rất lớn
if (a) {
doA();
if (b) {
doB();
if (c) {
doC();
} else {
return "No C for you!";
}
} else {
return "No B for you!";
}
} else {
return "No A for you!";
}
Code khó hiểu,
khó bảo trì
if (!a) {
return "No A for you!";
}
doA();
if (!b) {
return "No B for you!";
}
doB();
if (!c) {
return "No C for you!";
}
doC();
Các lệnh if phẳng
hơn, ít lồng nhau
dễ bảo trì
Code nhanh nhất là không làm gì cả
• Hãy để tất cả logic kiểm tra lên
đầu ~ sanity check
• Thoát khỏi hàm hoặc throw
exception càng nhanh càng tốt
switch
switch vs if then else
• switch dùng khi điều kiện chỉ ứng
với các khả năng rời rạc, đếm
được ~ discret values
• if then else điều kiện có thể rời
rạc hoặc liên tục
typedef enum {
RED,
GREEN,
BLUE
} colors;
colors c;
switch (c) {
case RED:
//...
break;
case GREEN:
//...
break;
default:
//Luôn phải có nhánh mặc định default
break;
}
Điều kiện trong switch
phải có giá trị rời rạc,
nguyên kiểu integer hoặc
enum
Tối ưu lệnh switch
• Cần bảo trì: xếp các case theo
thứ tự tự nhiên dễ nhớ
• Cần tốc độ: xếp các case xác suất
xảy ra cao hơn lên đầu
switch và if then else cái nào nhanh hơn?
• Số khả năng < 5 dùng if then else
• 5 <= số khả năng <= 10 dùng switch
• Trên 10 nên lookup table hoặc hash
list để đảm bảo thời gian truy cập
phần tử bất kỳ là như nhau
https://stackoverflow.com/questions/767821/is-else-if-faster-than-switch-case
http://www.blackwasp.co.uk/SpeedTestIfElseSwitch.aspx
Mã hoá chuỗi
Ký	tự	vào Ký	tự	ra
a m
b q
c r
d s
e x
0 A
1 Q
2 T
other *
Hãy viết hàm mã hoá ứng với mỗi ký tự vào
sẽ có 1 ký tự ra. Nếu không tìm được ký tự
phù hợp thì xuất ra *
Ví dụ ‘abc23’ sẽ thành ‘mqrT*’
for, while
for () { }
• 1 biến đếm rời rạc
• Lệnh khởi tạo ban đầu
• Điều kiện dừng vòng lặp
• Lệnh tác động lên biến đếm: tăng
– giảm
• Chú ý không nhất thiết tăng hay
giảm 1 đơn vị
break - continue
• break //thoát khỏi vòng lặp ngay
• continue //bỏ qua phần còn lại,
chạy luôn lần lặp tiếp theo
Vòng lặp for lồng nhau
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
for (int k = 0; k < P; k++) {
//Do some thing M * N * P times
}
}
}
Chuyển đoạn lệnh tính toán không
phụ thuộc biến đếm vòng lặp ra
ngoài
Chỉ để trong vòng lặp for những đoạn code sử dụng biến
đếm, bị ảnh hưởng bởi biến đếm
for (int i = 0; i < 10000; i++)
{
float pi = computePi();
printf("%dn", i);
}
float pi = computePi();
for (int i = 0; i < 10000; i++)
{
printf("%dn", i);
}
Gây	chậm
Tốt	hơn
Không thay đổi biến đếm trong thân vòng lặp
for (int i = 0; i < 10; i++) {
i = i * 2; //Dangerous code, i is mutable
printf("%dn", i);
}
for (int i = 0; i < 10; i++) {
int j = i * 2; //i is immutable inside loop
printf("%dn", j);
}
Nguy hiểm
An toàn
while vs do while
do {
//lặp trước, kiểm tra sau
} while(condition);
while(condition) {
//Kiểm tra trước, lặp sau
};
int condition = 0;
do {
printf("Hello"); //In 1 lần Hello
} while (condition);
Khuyến cáo không nên dùng do while, về sau
gỡ rối rất mệt
for
• Dùng khi có biến
đếm và nhìn ra số
lần lặp
• Không được sửa biến
đếm trong thân vòng
lặp
while
• Dùng khi nhìn ra
điều kiện để lặp
• Nếu có biến đếm thì
có thể sửa biến đếm
trong thân vòng lặp
Function-hàm
Mục đích của hàm
• Chia nhỏ độ phức tạp ~ Divide conquer
• Mỗi hàm một chức năng mà tên hàm thể
hiện rõ ~ Single responsibility
• Tăng khả năng tái sử dụng ~
Reusability
• Kiểm thử được ~ Testable
• Ít phụ thuộc đến thành phần khác ~
loosely coupling
Divide Conquer
Single Responsibility
Reusability
Testable
Sử dụng hàm main
• main() là hàm chính quản lý toàn bộ
vòng đời của ứng dụng
• Chỉ viết logic điều phối chung
trong main
• Không viết logic tác vụ cụ thể
trong main
• Tuyệt đối không gọi đệ quy hàm main
int main(int N) {
int result = 1;
if (N > 1) {
return N * main(N-1);
}
return result;
}
Viết đệ quy hàm main. Một cách viết cẩu thả. C cho
phép nhưng C++ tuyệt đối cấm
#include <stdio.h>
int main() {
int result = 1;
int N;
printf("Nhap vao so N tinh giai thuan");
scanf(" %d", &N);
for (int i = 1; i < N; i++) {
result *= result * i;
}
printf("%d", result);
return 0;
}
Cách viết này phải
đọc toàn bộ code
mới hiểu
Đây là code điển hình của lập trình viên mới vào nghề
long long giaiThua(int N) {
if (N < 2) return 1;
long long result = 1;
for (int i = 2; i <= N; i++) {
result = result * i;
}
return result;
}
int main() {
int N;
printf("Nhap vao so N tinh giai thuan");
scanf(" %ld", &N);
printf("%lld", giaiThua(N));
return 0;
}
Tên hàm mô tả
rõ luôn mục
đích
long long giaiThua(int N) {
if (N < 2) return 1;
long long result = 1;
for (int i = 2; i <= N; i++) {
result = result * i;
}
return result;
}
Trong hàm không có lệnh nhập xuất cụ thể bởi,
việc tính giai thừa chỉ quan tâm nhập vào số
nguyên rồi trả về kết quả
Cohesion – Loose coupling
void giaiThua() {
int N;
long long result = 1;
printf("Nhap vao so N tinh giai thuan");
scanf(" %ld", &N);
if (N > 1) {
for (int i = 2; i <= N; i++) {
result = result * i;
}
}
printf("%lld", result);
}
Cách viết hàm rất tệ vì việc tính giai thừa lại phụ thuộc
hàm nhập scanf và xuất printf
Đặt tên hàm kiểu mệnh lệnh
• Lập trình mệnh lệnh: imperative programming
• Tên hàm bắt đầu bằng động từ, camel case,
chữ cái đầu tiên viết chữ thường
– lowerCase(const char* string)
– reverseString(const char* string)
– validateEmail(const char* email)
– sendPackage(const byte* buff)
Đặt tên hàm để kiểm tra đúng sai
• Nên bằng đầu bằng từ is và trả về kiểu boolean
• C không hỗ trợ boolean thì dùng stdbool.h hoặc tự
định nghĩa
• Ví dụ:
– bool isJobDone(int jobID)
– bool isTodayWeekEnd(date today)
Đặt tên hàm xử lý sự kiện
• Lập trình hướng sự kiện: event driven
programming
• Luôn bắt đầu bằng on theo sau tên sự kiện
• Ví dụ:
– void onReceiveEmail(netEvent* e)
– void onWindowClose()
– void onCacheIsFull()
đặt tên tham số
• Sử dụng danh từ tiếng Anh
• Nếu tên hàm đã rõ ràng, dùng ký tự
i,j,k,N … để đặt tên tham số
• Không cần phải bổ xung tên kiểu
• Mảng, tập nên dùng danh từ số nhiều
Chống thay đổi tham số
void change(const char* string)
{
string[1] = 'A';
}
Không sửa
đổi nội
dung
chuỗi
error: read-only variable
is not assignable
Chống thay đổi địa chỉ con trỏ
void change(char* const string)
{
string = "New value";
}
Không
thay đổi
địa chỉ
con trỏ
error: cannot assign to variable
'string' with const-qualified
type 'char *const'
Module hoá
Ứng dụng trở nên phức tạp, cần phải
chia nhỏ thành các module chuyên biệt.
Mỗi module chứa một tập các hàm, định
nghĩa liên quan, chung mục đích
Tất cả trong một Module hoá
#include <stdio.h>
#include "algorithm.h"
int main() {
int N;
printf("Nhap vao so N tinh giai thuan");
scanf(" %ld", &N);
printf("%lld", giaiThua(N));
return 0;
}
#ifndef DEMO_ALGORITHM_H
#define DEMO_ALGORITHM_H
long long giaiThua(int N);
#endif //DEMO_ALGORITHM_H
main.c
algorithm.h
algorithm.c
#include <stdio.h>//sử dụng thư
viện chuẩn
#include "algorithm.h” //sử dụng
thư viện tự viết
<> vs " "

Mais conteúdo relacionado

Mais procurados

Hướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.docHướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.docTrần Văn Nam
 
Huong dan su dung va debug voi dev c++
Huong dan su dung va debug voi dev c++Huong dan su dung va debug voi dev c++
Huong dan su dung va debug voi dev c++tuandong_ptit
 
Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-Minh Ngoc Tran
 
Lap trinh c++ có lời giải 3
Lap trinh c++ có lời giải 3Lap trinh c++ có lời giải 3
Lap trinh c++ có lời giải 3Minh Ngoc Tran
 
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modulesLocal sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modulesTrần Văn Nam
 
Ctdl C02
Ctdl C02Ctdl C02
Ctdl C02giang
 
Giao trinh bai tap c va c++
Giao trinh bai tap c va c++Giao trinh bai tap c va c++
Giao trinh bai tap c va c++Congdat Le
 
Ctdl C05
Ctdl C05Ctdl C05
Ctdl C05giang
 
Nmlt c04 cau_lenhdieukienvarenhanh
Nmlt c04 cau_lenhdieukienvarenhanhNmlt c04 cau_lenhdieukienvarenhanh
Nmlt c04 cau_lenhdieukienvarenhanhMinh Ngoc Tran
 

Mais procurados (18)

Tut4 solution
Tut4 solutionTut4 solution
Tut4 solution
 
Tut6 solution
Tut6 solutionTut6 solution
Tut6 solution
 
Hướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.docHướng dẫn làm bt về chuỗi.doc
Hướng dẫn làm bt về chuỗi.doc
 
Nmlt c06 ham
Nmlt c06 hamNmlt c06 ham
Nmlt c06 ham
 
Tut5 solution
Tut5 solutionTut5 solution
Tut5 solution
 
Lect09 string
Lect09 stringLect09 string
Lect09 string
 
Ktlt lab full
Ktlt lab fullKtlt lab full
Ktlt lab full
 
String c++
String c++String c++
String c++
 
Huong dan su dung va debug voi dev c++
Huong dan su dung va debug voi dev c++Huong dan su dung va debug voi dev c++
Huong dan su dung va debug voi dev c++
 
Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-
 
Lap trinh c++ có lời giải 3
Lap trinh c++ có lời giải 3Lap trinh c++ có lời giải 3
Lap trinh c++ có lời giải 3
 
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modulesLocal sakainame   501127 ktl_trình hlmt1 a01 fall 2013 _ modules
Local sakainame 501127 ktl_trình hlmt1 a01 fall 2013 _ modules
 
Nmlt c11 con_trocoban
Nmlt c11 con_trocobanNmlt c11 con_trocoban
Nmlt c11 con_trocoban
 
Ctdl C02
Ctdl C02Ctdl C02
Ctdl C02
 
Tn ktlt
Tn ktltTn ktlt
Tn ktlt
 
Giao trinh bai tap c va c++
Giao trinh bai tap c va c++Giao trinh bai tap c va c++
Giao trinh bai tap c va c++
 
Ctdl C05
Ctdl C05Ctdl C05
Ctdl C05
 
Nmlt c04 cau_lenhdieukienvarenhanh
Nmlt c04 cau_lenhdieukienvarenhanhNmlt c04 cau_lenhdieukienvarenhanh
Nmlt c04 cau_lenhdieukienvarenhanh
 

Semelhante a Control structure in C

Bài tập mẫu C và C++ có giải
Bài tập mẫu C và C++ có giảiBài tập mẫu C và C++ có giải
Bài tập mẫu C và C++ có giảiTrung Thanh Nguyen
 
Lập trình C cơ bản cho vi điều khiển
Lập trình C cơ bản cho vi điều khiểnLập trình C cơ bản cho vi điều khiển
Lập trình C cơ bản cho vi điều khiểnMr Giap
 
Huong danontapc
Huong danontapcHuong danontapc
Huong danontapcHồ Lợi
 
Lec3. Ham.pdf
Lec3. Ham.pdfLec3. Ham.pdf
Lec3. Ham.pdfKinHongnh
 
2 Cau Truc Dieu Khien
2 Cau Truc Dieu Khien2 Cau Truc Dieu Khien
2 Cau Truc Dieu KhienCuong
 
1 Gioi Thieu Chung
1 Gioi Thieu Chung1 Gioi Thieu Chung
1 Gioi Thieu ChungCuong
 
Lập Trình an toàn - Secure programming
Lập Trình an toàn - Secure programmingLập Trình an toàn - Secure programming
Lập Trình an toàn - Secure programmingbeatmaking
 
Sổ tay thư viện hàm ngôn ngữ C
Sổ tay thư viện hàm ngôn ngữ CSổ tay thư viện hàm ngôn ngữ C
Sổ tay thư viện hàm ngôn ngữ Cvncoding
 
Nmlt C06 Ham
Nmlt C06 HamNmlt C06 Ham
Nmlt C06 HamCuong
 
Thdc3 Lap Trinh C
Thdc3 Lap Trinh CThdc3 Lap Trinh C
Thdc3 Lap Trinh Cquyloc
 

Semelhante a Control structure in C (20)

Giao trinh bai tap c va c++
Giao trinh bai tap c va c++Giao trinh bai tap c va c++
Giao trinh bai tap c va c++
 
Session 09
Session 09Session 09
Session 09
 
Session 09
Session 09Session 09
Session 09
 
Bài tập mẫu C và C++ có giải
Bài tập mẫu C và C++ có giảiBài tập mẫu C và C++ có giải
Bài tập mẫu C và C++ có giải
 
Lập trình C cơ bản cho vi điều khiển
Lập trình C cơ bản cho vi điều khiểnLập trình C cơ bản cho vi điều khiển
Lập trình C cơ bản cho vi điều khiển
 
Huong danontapc
Huong danontapcHuong danontapc
Huong danontapc
 
Lec3. Ham.pdf
Lec3. Ham.pdfLec3. Ham.pdf
Lec3. Ham.pdf
 
2 Cau Truc Dieu Khien
2 Cau Truc Dieu Khien2 Cau Truc Dieu Khien
2 Cau Truc Dieu Khien
 
Ontap ltc
Ontap ltcOntap ltc
Ontap ltc
 
1 Gioi Thieu Chung
1 Gioi Thieu Chung1 Gioi Thieu Chung
1 Gioi Thieu Chung
 
Lập Trình an toàn - Secure programming
Lập Trình an toàn - Secure programmingLập Trình an toàn - Secure programming
Lập Trình an toàn - Secure programming
 
Sổ tay thư viện hàm ngôn ngữ C
Sổ tay thư viện hàm ngôn ngữ CSổ tay thư viện hàm ngôn ngữ C
Sổ tay thư viện hàm ngôn ngữ C
 
Debug trong c
Debug trong cDebug trong c
Debug trong c
 
Nmlt C06 Ham
Nmlt C06 HamNmlt C06 Ham
Nmlt C06 Ham
 
Nhung bai mau lap trinh c
Nhung bai mau lap trinh cNhung bai mau lap trinh c
Nhung bai mau lap trinh c
 
C9 templates
C9 templatesC9 templates
C9 templates
 
C9 templates
C9 templatesC9 templates
C9 templates
 
Thdc3 Lap Trinh C
Thdc3 Lap Trinh CThdc3 Lap Trinh C
Thdc3 Lap Trinh C
 
Ctdl lab01
Ctdl lab01Ctdl lab01
Ctdl lab01
 
Bai 18
Bai 18Bai 18
Bai 18
 

Mais de TechMaster Vietnam

Go micro framework to build microservices
Go micro framework to build microservicesGo micro framework to build microservices
Go micro framework to build microservicesTechMaster Vietnam
 
Authentication and Authorization
Authentication and AuthorizationAuthentication and Authorization
Authentication and AuthorizationTechMaster Vietnam
 
Postgresql các vấn đề thực tế
Postgresql các vấn đề thực tếPostgresql các vấn đề thực tế
Postgresql các vấn đề thực tếTechMaster Vietnam
 
Chia sẻ kinh nghiệm giảng dạy CNTT
Chia sẻ kinh nghiệm giảng dạy CNTTChia sẻ kinh nghiệm giảng dạy CNTT
Chia sẻ kinh nghiệm giảng dạy CNTTTechMaster Vietnam
 
Cơ sở dữ liệu postgres
Cơ sở dữ liệu postgresCơ sở dữ liệu postgres
Cơ sở dữ liệu postgresTechMaster Vietnam
 
Tìm nền tảng lập trình cho 5 năm tới
Tìm nền tảng lập trình cho 5 năm tớiTìm nền tảng lập trình cho 5 năm tới
Tìm nền tảng lập trình cho 5 năm tớiTechMaster Vietnam
 
Cấu hình Postgresql căn bản trong 20 phút
Cấu hình Postgresql căn bản trong 20 phútCấu hình Postgresql căn bản trong 20 phút
Cấu hình Postgresql căn bản trong 20 phútTechMaster Vietnam
 
Manage your project differently
Manage your project differentlyManage your project differently
Manage your project differentlyTechMaster Vietnam
 
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSXHướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSXTechMaster Vietnam
 

Mais de TechMaster Vietnam (20)

Neural Network from Scratch
Neural Network from ScratchNeural Network from Scratch
Neural Network from Scratch
 
Go micro framework to build microservices
Go micro framework to build microservicesGo micro framework to build microservices
Go micro framework to build microservices
 
Flutter vs React Native 2018
Flutter vs React Native 2018Flutter vs React Native 2018
Flutter vs React Native 2018
 
Authentication and Authorization
Authentication and AuthorizationAuthentication and Authorization
Authentication and Authorization
 
Postgresql security
Postgresql securityPostgresql security
Postgresql security
 
Knex Postgresql Migration
Knex Postgresql MigrationKnex Postgresql Migration
Knex Postgresql Migration
 
Postgresql các vấn đề thực tế
Postgresql các vấn đề thực tếPostgresql các vấn đề thực tế
Postgresql các vấn đề thực tế
 
Arrowjs.io
Arrowjs.ioArrowjs.io
Arrowjs.io
 
Minimum Viable Products
Minimum Viable ProductsMinimum Viable Products
Minimum Viable Products
 
Chia sẻ kinh nghiệm giảng dạy CNTT
Chia sẻ kinh nghiệm giảng dạy CNTTChia sẻ kinh nghiệm giảng dạy CNTT
Chia sẻ kinh nghiệm giảng dạy CNTT
 
Cơ sở dữ liệu postgres
Cơ sở dữ liệu postgresCơ sở dữ liệu postgres
Cơ sở dữ liệu postgres
 
Node.js căn bản
Node.js căn bảnNode.js căn bản
Node.js căn bản
 
Tìm nền tảng lập trình cho 5 năm tới
Tìm nền tảng lập trình cho 5 năm tớiTìm nền tảng lập trình cho 5 năm tới
Tìm nền tảng lập trình cho 5 năm tới
 
iOS Master - Detail & TabBar
iOS Master - Detail & TabBariOS Master - Detail & TabBar
iOS Master - Detail & TabBar
 
Phalcon căn bản
Phalcon căn bảnPhalcon căn bản
Phalcon căn bản
 
Cấu hình Postgresql căn bản trong 20 phút
Cấu hình Postgresql căn bản trong 20 phútCấu hình Postgresql căn bản trong 20 phút
Cấu hình Postgresql căn bản trong 20 phút
 
Phalcon introduction
Phalcon introductionPhalcon introduction
Phalcon introduction
 
Slide that wins
Slide that winsSlide that wins
Slide that wins
 
Manage your project differently
Manage your project differentlyManage your project differently
Manage your project differently
 
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSXHướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
 

Último

Tài liệu kỹ thuật điều hòa Panasonic - Điện lạnh Bách Khoa
Tài liệu kỹ thuật điều hòa Panasonic - Điện lạnh Bách KhoaTài liệu kỹ thuật điều hòa Panasonic - Điện lạnh Bách Khoa
Tài liệu kỹ thuật điều hòa Panasonic - Điện lạnh Bách KhoaKhiNguynCngtyTNHH
 
GIÁO ÁN KẾ HOẠCH BÀI DẠY ĐỊA LÍ 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN 551...
GIÁO ÁN KẾ HOẠCH BÀI DẠY ĐỊA LÍ 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN 551...GIÁO ÁN KẾ HOẠCH BÀI DẠY ĐỊA LÍ 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN 551...
GIÁO ÁN KẾ HOẠCH BÀI DẠY ĐỊA LÍ 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN 551...Nguyen Thanh Tu Collection
 
GIÁO ÁN KẾ HOẠCH BÀI DẠY TOÁN 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN 5512 ...
GIÁO ÁN KẾ HOẠCH BÀI DẠY TOÁN 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN 5512 ...GIÁO ÁN KẾ HOẠCH BÀI DẠY TOÁN 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN 5512 ...
GIÁO ÁN KẾ HOẠCH BÀI DẠY TOÁN 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN 5512 ...Nguyen Thanh Tu Collection
 
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...Nguyen Thanh Tu Collection
 
NỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docx
NỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docxNỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docx
NỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docx7E26NguynThThyLinh
 
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT HÓA HỌC 2024 - TỪ CÁC TRƯỜNG, TRƯ...
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT HÓA HỌC 2024 - TỪ CÁC TRƯỜNG, TRƯ...TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT HÓA HỌC 2024 - TỪ CÁC TRƯỜNG, TRƯ...
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT HÓA HỌC 2024 - TỪ CÁC TRƯỜNG, TRƯ...Nguyen Thanh Tu Collection
 
Chương 1- TTHCM.pptx. SLide giới thiệu về tư tưởng HỒ CHÍ MINH
Chương 1- TTHCM.pptx. SLide giới thiệu về tư tưởng HỒ CHÍ MINHChương 1- TTHCM.pptx. SLide giới thiệu về tư tưởng HỒ CHÍ MINH
Chương 1- TTHCM.pptx. SLide giới thiệu về tư tưởng HỒ CHÍ MINHlaikaa88
 
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 TIẾNG ANH I-LEARN SMART START LỚP 3, 4 NĂM HỌC 2023-...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 TIẾNG ANH I-LEARN SMART START LỚP 3, 4 NĂM HỌC 2023-...BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 TIẾNG ANH I-LEARN SMART START LỚP 3, 4 NĂM HỌC 2023-...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 TIẾNG ANH I-LEARN SMART START LỚP 3, 4 NĂM HỌC 2023-...Nguyen Thanh Tu Collection
 
GIẢI-ĐỀ-CƯƠNG-NHẬP-MÔN-KHOA-HỌC-XÃ-HỘI-VÀ-NHÂN-VĂN-KHIÊM-BK69.pdf
GIẢI-ĐỀ-CƯƠNG-NHẬP-MÔN-KHOA-HỌC-XÃ-HỘI-VÀ-NHÂN-VĂN-KHIÊM-BK69.pdfGIẢI-ĐỀ-CƯƠNG-NHẬP-MÔN-KHOA-HỌC-XÃ-HỘI-VÀ-NHÂN-VĂN-KHIÊM-BK69.pdf
GIẢI-ĐỀ-CƯƠNG-NHẬP-MÔN-KHOA-HỌC-XÃ-HỘI-VÀ-NHÂN-VĂN-KHIÊM-BK69.pdfHngNguyn271079
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
CH glucid university of Pham Ngoc Thach- v7.pdf
CH glucid university of Pham Ngoc Thach- v7.pdfCH glucid university of Pham Ngoc Thach- v7.pdf
CH glucid university of Pham Ngoc Thach- v7.pdfSuperJudy1
 
trò chơi về môn học tư tưởng hồ chí minh
trò chơi về môn học tư tưởng hồ chí minhtrò chơi về môn học tư tưởng hồ chí minh
trò chơi về môn học tư tưởng hồ chí minhNguynHuTh6
 
BỘ ĐỀ CHÍNH THỨC + TÁCH ĐỀ + ĐỀ LUYỆN THI VÀO LỚP 10 CHUYÊN TOÁN CÁC TỈNH NĂM...
BỘ ĐỀ CHÍNH THỨC + TÁCH ĐỀ + ĐỀ LUYỆN THI VÀO LỚP 10 CHUYÊN TOÁN CÁC TỈNH NĂM...BỘ ĐỀ CHÍNH THỨC + TÁCH ĐỀ + ĐỀ LUYỆN THI VÀO LỚP 10 CHUYÊN TOÁN CÁC TỈNH NĂM...
BỘ ĐỀ CHÍNH THỨC + TÁCH ĐỀ + ĐỀ LUYỆN THI VÀO LỚP 10 CHUYÊN TOÁN CÁC TỈNH NĂM...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
GIÁO ÁN KẾ HOẠCH BÀI DẠY TOÁN 8 CÁNH DIỀU - CẢ NĂM THEO CÔNG VĂN 5512 (2 CỘT)...
GIÁO ÁN KẾ HOẠCH BÀI DẠY TOÁN 8 CÁNH DIỀU - CẢ NĂM THEO CÔNG VĂN 5512 (2 CỘT)...GIÁO ÁN KẾ HOẠCH BÀI DẠY TOÁN 8 CÁNH DIỀU - CẢ NĂM THEO CÔNG VĂN 5512 (2 CỘT)...
GIÁO ÁN KẾ HOẠCH BÀI DẠY TOÁN 8 CÁNH DIỀU - CẢ NĂM THEO CÔNG VĂN 5512 (2 CỘT)...Nguyen Thanh Tu Collection
 
Đề ôn thi VIOEDU lớp 2 cấp Tỉnh năm 2023 - 2024 (cấp Thành phố)
Đề ôn thi VIOEDU lớp 2 cấp Tỉnh năm 2023 - 2024 (cấp Thành phố)Đề ôn thi VIOEDU lớp 2 cấp Tỉnh năm 2023 - 2024 (cấp Thành phố)
Đề ôn thi VIOEDU lớp 2 cấp Tỉnh năm 2023 - 2024 (cấp Thành phố)Bồi Dưỡng HSG Toán Lớp 3
 
Đề ôn thi VIOEDU lớp 1 cấp Tỉnh năm 2023 - 2024 (cấp Thành phố)
Đề ôn thi VIOEDU lớp 1 cấp Tỉnh năm 2023 - 2024 (cấp Thành phố)Đề ôn thi VIOEDU lớp 1 cấp Tỉnh năm 2023 - 2024 (cấp Thành phố)
Đề ôn thi VIOEDU lớp 1 cấp Tỉnh năm 2023 - 2024 (cấp Thành phố)Bồi Dưỡng HSG Toán Lớp 3
 
GIÁO TRÌNH BỒI DƯỠNG HỌC SINH GIỎI THCS VÀ THI VÀO 10 THPT CHUYÊN MÔN TIẾNG A...
GIÁO TRÌNH BỒI DƯỠNG HỌC SINH GIỎI THCS VÀ THI VÀO 10 THPT CHUYÊN MÔN TIẾNG A...GIÁO TRÌNH BỒI DƯỠNG HỌC SINH GIỎI THCS VÀ THI VÀO 10 THPT CHUYÊN MÔN TIẾNG A...
GIÁO TRÌNH BỒI DƯỠNG HỌC SINH GIỎI THCS VÀ THI VÀO 10 THPT CHUYÊN MÔN TIẾNG A...Nguyen Thanh Tu Collection
 
BÀI TẬP BỔ TRỢ TIẾNG ANH LỚP 8 CẢ NĂM - FRIENDS PLUS - BẢN ĐẸP - CÓ FILE NGH...
BÀI TẬP BỔ TRỢ TIẾNG ANH LỚP 8 CẢ NĂM - FRIENDS PLUS - BẢN ĐẸP - CÓ FILE NGH...BÀI TẬP BỔ TRỢ TIẾNG ANH LỚP 8 CẢ NĂM - FRIENDS PLUS - BẢN ĐẸP - CÓ FILE NGH...
BÀI TẬP BỔ TRỢ TIẾNG ANH LỚP 8 CẢ NĂM - FRIENDS PLUS - BẢN ĐẸP - CÓ FILE NGH...Nguyen Thanh Tu Collection
 
GIÁO ÁN KẾ HOẠCH BÀI DẠY CÔNG NGHỆ 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN ...
GIÁO ÁN KẾ HOẠCH BÀI DẠY CÔNG NGHỆ 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN ...GIÁO ÁN KẾ HOẠCH BÀI DẠY CÔNG NGHỆ 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN ...
GIÁO ÁN KẾ HOẠCH BÀI DẠY CÔNG NGHỆ 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN ...Nguyen Thanh Tu Collection
 

Último (20)

Tài liệu kỹ thuật điều hòa Panasonic - Điện lạnh Bách Khoa
Tài liệu kỹ thuật điều hòa Panasonic - Điện lạnh Bách KhoaTài liệu kỹ thuật điều hòa Panasonic - Điện lạnh Bách Khoa
Tài liệu kỹ thuật điều hòa Panasonic - Điện lạnh Bách Khoa
 
GIÁO ÁN KẾ HOẠCH BÀI DẠY ĐỊA LÍ 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN 551...
GIÁO ÁN KẾ HOẠCH BÀI DẠY ĐỊA LÍ 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN 551...GIÁO ÁN KẾ HOẠCH BÀI DẠY ĐỊA LÍ 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN 551...
GIÁO ÁN KẾ HOẠCH BÀI DẠY ĐỊA LÍ 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN 551...
 
GIÁO ÁN KẾ HOẠCH BÀI DẠY TOÁN 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN 5512 ...
GIÁO ÁN KẾ HOẠCH BÀI DẠY TOÁN 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN 5512 ...GIÁO ÁN KẾ HOẠCH BÀI DẠY TOÁN 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN 5512 ...
GIÁO ÁN KẾ HOẠCH BÀI DẠY TOÁN 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN 5512 ...
 
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
 
NỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docx
NỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docxNỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docx
NỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docx
 
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT HÓA HỌC 2024 - TỪ CÁC TRƯỜNG, TRƯ...
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT HÓA HỌC 2024 - TỪ CÁC TRƯỜNG, TRƯ...TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT HÓA HỌC 2024 - TỪ CÁC TRƯỜNG, TRƯ...
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT HÓA HỌC 2024 - TỪ CÁC TRƯỜNG, TRƯ...
 
Chương 1- TTHCM.pptx. SLide giới thiệu về tư tưởng HỒ CHÍ MINH
Chương 1- TTHCM.pptx. SLide giới thiệu về tư tưởng HỒ CHÍ MINHChương 1- TTHCM.pptx. SLide giới thiệu về tư tưởng HỒ CHÍ MINH
Chương 1- TTHCM.pptx. SLide giới thiệu về tư tưởng HỒ CHÍ MINH
 
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 TIẾNG ANH I-LEARN SMART START LỚP 3, 4 NĂM HỌC 2023-...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 TIẾNG ANH I-LEARN SMART START LỚP 3, 4 NĂM HỌC 2023-...BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 TIẾNG ANH I-LEARN SMART START LỚP 3, 4 NĂM HỌC 2023-...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 TIẾNG ANH I-LEARN SMART START LỚP 3, 4 NĂM HỌC 2023-...
 
GIẢI-ĐỀ-CƯƠNG-NHẬP-MÔN-KHOA-HỌC-XÃ-HỘI-VÀ-NHÂN-VĂN-KHIÊM-BK69.pdf
GIẢI-ĐỀ-CƯƠNG-NHẬP-MÔN-KHOA-HỌC-XÃ-HỘI-VÀ-NHÂN-VĂN-KHIÊM-BK69.pdfGIẢI-ĐỀ-CƯƠNG-NHẬP-MÔN-KHOA-HỌC-XÃ-HỘI-VÀ-NHÂN-VĂN-KHIÊM-BK69.pdf
GIẢI-ĐỀ-CƯƠNG-NHẬP-MÔN-KHOA-HỌC-XÃ-HỘI-VÀ-NHÂN-VĂN-KHIÊM-BK69.pdf
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
CH glucid university of Pham Ngoc Thach- v7.pdf
CH glucid university of Pham Ngoc Thach- v7.pdfCH glucid university of Pham Ngoc Thach- v7.pdf
CH glucid university of Pham Ngoc Thach- v7.pdf
 
trò chơi về môn học tư tưởng hồ chí minh
trò chơi về môn học tư tưởng hồ chí minhtrò chơi về môn học tư tưởng hồ chí minh
trò chơi về môn học tư tưởng hồ chí minh
 
BỘ ĐỀ CHÍNH THỨC + TÁCH ĐỀ + ĐỀ LUYỆN THI VÀO LỚP 10 CHUYÊN TOÁN CÁC TỈNH NĂM...
BỘ ĐỀ CHÍNH THỨC + TÁCH ĐỀ + ĐỀ LUYỆN THI VÀO LỚP 10 CHUYÊN TOÁN CÁC TỈNH NĂM...BỘ ĐỀ CHÍNH THỨC + TÁCH ĐỀ + ĐỀ LUYỆN THI VÀO LỚP 10 CHUYÊN TOÁN CÁC TỈNH NĂM...
BỘ ĐỀ CHÍNH THỨC + TÁCH ĐỀ + ĐỀ LUYỆN THI VÀO LỚP 10 CHUYÊN TOÁN CÁC TỈNH NĂM...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
GIÁO ÁN KẾ HOẠCH BÀI DẠY TOÁN 8 CÁNH DIỀU - CẢ NĂM THEO CÔNG VĂN 5512 (2 CỘT)...
GIÁO ÁN KẾ HOẠCH BÀI DẠY TOÁN 8 CÁNH DIỀU - CẢ NĂM THEO CÔNG VĂN 5512 (2 CỘT)...GIÁO ÁN KẾ HOẠCH BÀI DẠY TOÁN 8 CÁNH DIỀU - CẢ NĂM THEO CÔNG VĂN 5512 (2 CỘT)...
GIÁO ÁN KẾ HOẠCH BÀI DẠY TOÁN 8 CÁNH DIỀU - CẢ NĂM THEO CÔNG VĂN 5512 (2 CỘT)...
 
Đề ôn thi VIOEDU lớp 2 cấp Tỉnh năm 2023 - 2024 (cấp Thành phố)
Đề ôn thi VIOEDU lớp 2 cấp Tỉnh năm 2023 - 2024 (cấp Thành phố)Đề ôn thi VIOEDU lớp 2 cấp Tỉnh năm 2023 - 2024 (cấp Thành phố)
Đề ôn thi VIOEDU lớp 2 cấp Tỉnh năm 2023 - 2024 (cấp Thành phố)
 
Đề ôn thi VIOEDU lớp 1 cấp Tỉnh năm 2023 - 2024 (cấp Thành phố)
Đề ôn thi VIOEDU lớp 1 cấp Tỉnh năm 2023 - 2024 (cấp Thành phố)Đề ôn thi VIOEDU lớp 1 cấp Tỉnh năm 2023 - 2024 (cấp Thành phố)
Đề ôn thi VIOEDU lớp 1 cấp Tỉnh năm 2023 - 2024 (cấp Thành phố)
 
GIÁO TRÌNH BỒI DƯỠNG HỌC SINH GIỎI THCS VÀ THI VÀO 10 THPT CHUYÊN MÔN TIẾNG A...
GIÁO TRÌNH BỒI DƯỠNG HỌC SINH GIỎI THCS VÀ THI VÀO 10 THPT CHUYÊN MÔN TIẾNG A...GIÁO TRÌNH BỒI DƯỠNG HỌC SINH GIỎI THCS VÀ THI VÀO 10 THPT CHUYÊN MÔN TIẾNG A...
GIÁO TRÌNH BỒI DƯỠNG HỌC SINH GIỎI THCS VÀ THI VÀO 10 THPT CHUYÊN MÔN TIẾNG A...
 
BÀI TẬP BỔ TRỢ TIẾNG ANH LỚP 8 CẢ NĂM - FRIENDS PLUS - BẢN ĐẸP - CÓ FILE NGH...
BÀI TẬP BỔ TRỢ TIẾNG ANH LỚP 8 CẢ NĂM - FRIENDS PLUS - BẢN ĐẸP - CÓ FILE NGH...BÀI TẬP BỔ TRỢ TIẾNG ANH LỚP 8 CẢ NĂM - FRIENDS PLUS - BẢN ĐẸP - CÓ FILE NGH...
BÀI TẬP BỔ TRỢ TIẾNG ANH LỚP 8 CẢ NĂM - FRIENDS PLUS - BẢN ĐẸP - CÓ FILE NGH...
 
GIÁO ÁN KẾ HOẠCH BÀI DẠY CÔNG NGHỆ 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN ...
GIÁO ÁN KẾ HOẠCH BÀI DẠY CÔNG NGHỆ 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN ...GIÁO ÁN KẾ HOẠCH BÀI DẠY CÔNG NGHỆ 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN ...
GIÁO ÁN KẾ HOẠCH BÀI DẠY CÔNG NGHỆ 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN ...
 

Control structure in C

  • 1. C control structure Đơn giản mà đẹp cuong@techmaster.vn
  • 2. Nội dung • đọc vào, viết ra console • if then else • switch • for, while • function • include • define
  • 3. Đọc vào, viết ra console • scanf • fgets • vòng lặp nhập lựa chọn
  • 4. #include <stdio.h> main() { int a; printf("Input a numbern"); scanf("%d", &a); printf("%dn", a); char c; printf("Input a charactern"); scanf(" %c", &c); printf("%cn", c); return 0; } Nhập vào một số và một ký tự từ dòng lệnh sau đó in ra
  • 5. Sửa lỗi scanf nhận newline trước đó scanf("%c", &c);//Nếu phía trước người dùng gõ enter, lệnh scanf đọc vào ký tự newline rồi không đọc ký tự cần đọc nữa scanf(" %c", &c);//tạo khoảng trống tạm để bỏ qua ký tự new line trước đó
  • 6. scanf chỉ đọc vào đến ký tự space char str[128]; scanf("%s", str); printf("%sn", str); Input: hello world Output: hello Input: hello world Output: hello world Hy vọng Thực tế
  • 7. Cách sửa char str[128]; char* fmt = "%[^n]%*c"; printf("Please input string:n"); scanf(fmt, str); printf("%sn", str); https://stackoverflow.com/questions/6083045/scanf-n-skips-the-2nd-input-but-n-does-not-why
  • 8. Dùng fgets đọc vào một dòng #define BUFF_SIZE 128 char str[BUFF_SIZE]; printf("Please input string:n"); fgets(str, BUFF_SIZE, stdin); printf("%sn", str);
  • 9. Vòng lặp nhập lựa chọn người dùng int main() { printf("Enter your choicen"); printf("N. Create new student recordn"); printf("S. Search student by namen"); printf("E. Edit student recordn"); printf("Q. Quitn"); // Xem trang tiếp theo }
  • 10. char c; while (1) { scanf(" %c",&c); c = toupper(c); switch (c) { case 'N': printf("You select Nn"); break; case 'S': printf("You select Sn"); break; case 'E': printf("You select En"); break; case 'Q': printf("You select Q to quitn"); return 1; }
  • 11. Enter your choice N. Create new student record S. Search student by name E. Edit student record Q. Quit N You select N S You select S E You select E
  • 13. Cần ôn lại đại số bool https://www.tutorialspoint.com/cprogramming/c_operators.htm
  • 14. Các toán tử • && logical AND • || logical OR • ! logical NOT • !(A && B) = !A || !B • !(A || B) = !A && !B
  • 15. Nếu ưu tiên tốc độ if (conditionA) { } else if (conditionB) { } else if (conditionC) { } else { } Điều kiện có xác suất xảy ra lớn nhất lên đầu, Điều kiện có xác suất thấp nhất cuối cùng Nếu không đánh giá được xác suất xảy ra thì ưu tiên condition đơn giản lên đầu
  • 16. Bài tập • Từ dãy số nguyên dương 0 đến 20, hay dựng 3 mảng: – Mảng A chứa các số chia hết cho 5 – Mảng B chứa các số chia hết cho 3 – Mảng C chứa các số chia hết cho 2
  • 17. Nếu ưu tiên bảo trì, dễ hiểu if (age < 5) { } else if (age < 12) { } else if (age < 20) { } else if (age < 30) { } if (age < 20 && age >= 12) { } else if (age < 12 && age >=5) { } else if (age < 30 && age >=20) { } else if (age < 5) { } Nên Không nên
  • 18. Giảm thiểu if lồng nhau quá 2 lớp if lồng nhau 3 lớp trở lên cực khó debug, thường xảy thiếu trường hợp.
  • 19. if (A) { if (B) { if (C) { } else { //A đúng, B đúng, C sai } } else { //A đúng, B sai if (C) { //A đúng, B sai, C đúng } } } else { //A sai } Phát rồ luôn
  • 20. Lý thuyết tổ hợp • 3 điều kiện {A,B,C} thực ra có {A,!A,B,!B,C,!C} • Tìm ra tất cả tổ hợp có thể {A,B,C}, {!A,B,C}, {A,!B,C}, {!A,!B,C}, {A,!B,!C}, {!A,!B,!C}...
  • 21. Nếu không liệt kê tất cả các khả năng Chi phí để gỡ rối, sửa bug sẽ rất lớn
  • 22. if (a) { doA(); if (b) { doB(); if (c) { doC(); } else { return "No C for you!"; } } else { return "No B for you!"; } } else { return "No A for you!"; } Code khó hiểu, khó bảo trì
  • 23. if (!a) { return "No A for you!"; } doA(); if (!b) { return "No B for you!"; } doB(); if (!c) { return "No C for you!"; } doC(); Các lệnh if phẳng hơn, ít lồng nhau dễ bảo trì
  • 24. Code nhanh nhất là không làm gì cả • Hãy để tất cả logic kiểm tra lên đầu ~ sanity check • Thoát khỏi hàm hoặc throw exception càng nhanh càng tốt
  • 26. switch vs if then else • switch dùng khi điều kiện chỉ ứng với các khả năng rời rạc, đếm được ~ discret values • if then else điều kiện có thể rời rạc hoặc liên tục
  • 27. typedef enum { RED, GREEN, BLUE } colors; colors c; switch (c) { case RED: //... break; case GREEN: //... break; default: //Luôn phải có nhánh mặc định default break; } Điều kiện trong switch phải có giá trị rời rạc, nguyên kiểu integer hoặc enum
  • 28. Tối ưu lệnh switch • Cần bảo trì: xếp các case theo thứ tự tự nhiên dễ nhớ • Cần tốc độ: xếp các case xác suất xảy ra cao hơn lên đầu
  • 29. switch và if then else cái nào nhanh hơn? • Số khả năng < 5 dùng if then else • 5 <= số khả năng <= 10 dùng switch • Trên 10 nên lookup table hoặc hash list để đảm bảo thời gian truy cập phần tử bất kỳ là như nhau https://stackoverflow.com/questions/767821/is-else-if-faster-than-switch-case http://www.blackwasp.co.uk/SpeedTestIfElseSwitch.aspx
  • 30. Mã hoá chuỗi Ký tự vào Ký tự ra a m b q c r d s e x 0 A 1 Q 2 T other * Hãy viết hàm mã hoá ứng với mỗi ký tự vào sẽ có 1 ký tự ra. Nếu không tìm được ký tự phù hợp thì xuất ra * Ví dụ ‘abc23’ sẽ thành ‘mqrT*’
  • 32. for () { } • 1 biến đếm rời rạc • Lệnh khởi tạo ban đầu • Điều kiện dừng vòng lặp • Lệnh tác động lên biến đếm: tăng – giảm • Chú ý không nhất thiết tăng hay giảm 1 đơn vị
  • 33. break - continue • break //thoát khỏi vòng lặp ngay • continue //bỏ qua phần còn lại, chạy luôn lần lặp tiếp theo
  • 34. Vòng lặp for lồng nhau for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) { for (int k = 0; k < P; k++) { //Do some thing M * N * P times } } } Chuyển đoạn lệnh tính toán không phụ thuộc biến đếm vòng lặp ra ngoài
  • 35. Chỉ để trong vòng lặp for những đoạn code sử dụng biến đếm, bị ảnh hưởng bởi biến đếm for (int i = 0; i < 10000; i++) { float pi = computePi(); printf("%dn", i); } float pi = computePi(); for (int i = 0; i < 10000; i++) { printf("%dn", i); } Gây chậm Tốt hơn
  • 36. Không thay đổi biến đếm trong thân vòng lặp for (int i = 0; i < 10; i++) { i = i * 2; //Dangerous code, i is mutable printf("%dn", i); } for (int i = 0; i < 10; i++) { int j = i * 2; //i is immutable inside loop printf("%dn", j); } Nguy hiểm An toàn
  • 37. while vs do while do { //lặp trước, kiểm tra sau } while(condition); while(condition) { //Kiểm tra trước, lặp sau };
  • 38. int condition = 0; do { printf("Hello"); //In 1 lần Hello } while (condition); Khuyến cáo không nên dùng do while, về sau gỡ rối rất mệt
  • 39. for • Dùng khi có biến đếm và nhìn ra số lần lặp • Không được sửa biến đếm trong thân vòng lặp while • Dùng khi nhìn ra điều kiện để lặp • Nếu có biến đếm thì có thể sửa biến đếm trong thân vòng lặp
  • 41. Mục đích của hàm • Chia nhỏ độ phức tạp ~ Divide conquer • Mỗi hàm một chức năng mà tên hàm thể hiện rõ ~ Single responsibility • Tăng khả năng tái sử dụng ~ Reusability • Kiểm thử được ~ Testable • Ít phụ thuộc đến thành phần khác ~ loosely coupling
  • 43. Sử dụng hàm main • main() là hàm chính quản lý toàn bộ vòng đời của ứng dụng • Chỉ viết logic điều phối chung trong main • Không viết logic tác vụ cụ thể trong main • Tuyệt đối không gọi đệ quy hàm main
  • 44. int main(int N) { int result = 1; if (N > 1) { return N * main(N-1); } return result; } Viết đệ quy hàm main. Một cách viết cẩu thả. C cho phép nhưng C++ tuyệt đối cấm
  • 45. #include <stdio.h> int main() { int result = 1; int N; printf("Nhap vao so N tinh giai thuan"); scanf(" %d", &N); for (int i = 1; i < N; i++) { result *= result * i; } printf("%d", result); return 0; } Cách viết này phải đọc toàn bộ code mới hiểu Đây là code điển hình của lập trình viên mới vào nghề
  • 46. long long giaiThua(int N) { if (N < 2) return 1; long long result = 1; for (int i = 2; i <= N; i++) { result = result * i; } return result; } int main() { int N; printf("Nhap vao so N tinh giai thuan"); scanf(" %ld", &N); printf("%lld", giaiThua(N)); return 0; } Tên hàm mô tả rõ luôn mục đích
  • 47. long long giaiThua(int N) { if (N < 2) return 1; long long result = 1; for (int i = 2; i <= N; i++) { result = result * i; } return result; } Trong hàm không có lệnh nhập xuất cụ thể bởi, việc tính giai thừa chỉ quan tâm nhập vào số nguyên rồi trả về kết quả Cohesion – Loose coupling
  • 48. void giaiThua() { int N; long long result = 1; printf("Nhap vao so N tinh giai thuan"); scanf(" %ld", &N); if (N > 1) { for (int i = 2; i <= N; i++) { result = result * i; } } printf("%lld", result); } Cách viết hàm rất tệ vì việc tính giai thừa lại phụ thuộc hàm nhập scanf và xuất printf
  • 49. Đặt tên hàm kiểu mệnh lệnh • Lập trình mệnh lệnh: imperative programming • Tên hàm bắt đầu bằng động từ, camel case, chữ cái đầu tiên viết chữ thường – lowerCase(const char* string) – reverseString(const char* string) – validateEmail(const char* email) – sendPackage(const byte* buff)
  • 50. Đặt tên hàm để kiểm tra đúng sai • Nên bằng đầu bằng từ is và trả về kiểu boolean • C không hỗ trợ boolean thì dùng stdbool.h hoặc tự định nghĩa • Ví dụ: – bool isJobDone(int jobID) – bool isTodayWeekEnd(date today)
  • 51. Đặt tên hàm xử lý sự kiện • Lập trình hướng sự kiện: event driven programming • Luôn bắt đầu bằng on theo sau tên sự kiện • Ví dụ: – void onReceiveEmail(netEvent* e) – void onWindowClose() – void onCacheIsFull()
  • 52. đặt tên tham số • Sử dụng danh từ tiếng Anh • Nếu tên hàm đã rõ ràng, dùng ký tự i,j,k,N … để đặt tên tham số • Không cần phải bổ xung tên kiểu • Mảng, tập nên dùng danh từ số nhiều
  • 53. Chống thay đổi tham số void change(const char* string) { string[1] = 'A'; } Không sửa đổi nội dung chuỗi error: read-only variable is not assignable
  • 54. Chống thay đổi địa chỉ con trỏ void change(char* const string) { string = "New value"; } Không thay đổi địa chỉ con trỏ error: cannot assign to variable 'string' with const-qualified type 'char *const'
  • 56. Ứng dụng trở nên phức tạp, cần phải chia nhỏ thành các module chuyên biệt. Mỗi module chứa một tập các hàm, định nghĩa liên quan, chung mục đích
  • 57. Tất cả trong một Module hoá
  • 58. #include <stdio.h> #include "algorithm.h" int main() { int N; printf("Nhap vao so N tinh giai thuan"); scanf(" %ld", &N); printf("%lld", giaiThua(N)); return 0; } #ifndef DEMO_ALGORITHM_H #define DEMO_ALGORITHM_H long long giaiThua(int N); #endif //DEMO_ALGORITHM_H main.c algorithm.h algorithm.c
  • 59. #include <stdio.h>//sử dụng thư viện chuẩn #include "algorithm.h” //sử dụng thư viện tự viết <> vs " "