/*auto readmore*/ /*auto readmore*/ /* an hien script*/ // an hien password /*an hien ma chuong trinh cong tru */ /*Scrollbox thanh cuon*/ /***Nhung CODE***/ /* dòng xanh dòng trắng */ /* https://cdnjs.com/libraries/prism lay thu vien, can vao ten file ma goi 1. copy link vao vi du:prism-python.min.js 2. ten ngon nua la python */ /*=== New posts ===*/ /*header slider*/ /*=== bai viet lien quan===*/ /*===tabcode===*/

[Tự Học Lập Trình C - Qua Các Bài Tập] COM108_Nhập Môn Lập Trình - Bài 2 - Input

MỤC TIÊU:
  • Biết cách đọc dữ liệu nhập vào từ bàn phím
  • Biết cách tạo biến để lưu trữ dữ liệu
  • Biết cách sử dụng các toán tử

LÝ THUYẾT:

Các kiểu dữ liệu nguyên thủy/cơ sở trong C:

Kiểu Dữ Liệu Từ Khóa
Số nguyên int
Số thực float
Số thực dạng Double double
Ký tự char
boolean bool


Một số kiểu cơ bản có thể được sửa đổi bởi sử dụng một hoặc nhiều modifier:
  • signed (kiểu có dấu)
  • unsigned (kiểu không có dấu)
  • short
  • long

Kiểu dữ liệu Kích thước (byte) Phạm vi giá trị
short int 2 -32768 tới 32767
int 4 -2147483648 tới 2147483647
long int 4 -2,147,483,647 tới 2,147,483,647

Kiểu dữ liệu Kích thước Phạm vi giá trị Độ chính xác
float 4 1.2E-38 to 3.4E+38 6 chữ số thập phân
double 8 2.3E-308 to 1.7E+308 15 chữ số thập phân
long double 10 3.4E-4932 to 1.1E+4932 19 chữ số thập phân


Kiểu dữ liệu Kích thước Phạm vi giá trị
char or signed char 1 -128 to 127
unsigned char 1 0 to 255
Kiểu char: Miền giá trị: 256 ký tự trong bảng mã ASCII bao gồm:
  • Ký tự số: 0 1 2 3 4 5 6 7 8 9 0
  • Ký tự chữ cái: a b c ... z A B C .... Z
  • Ký tự đặc biệt: @ $ # % ! & * ....

Các định dạng nhập xuất thường dùng trong C

Định dạng Kiểu dữ liệu Ví Dụ Kết quả Giải thích
%c char printf("%c");
%s char chuoi[] = "Hello World!"; printf("%s",chuoi); Hello World!
%s char * (chuỗi) printf("%.8s","Van Cong Khanh"); Van Cong Vì chỉ hiển thị 8 ký tự
%s char * (chuỗi) printf("[%20s]","Van Cong Khanh"); [ Van Cong Khanh] vì độ rộng là 20 nhưng chuỗi không đủ nên chương trình phải thêm các ký tự trắng vào phía trước
%d int, short printf("[%05d]", 1); [00001] Nếu số cần in ra không đủ 5 ký tự, chương trình tự động thêm các số 0 vào cho đủ chiều dài là 5
%f float printf("[%08.3f]", 123.45678); [0123.456] Chỉ lấy 3 số thập phân, nếu tổng chiều dài chưa đủ 8 ký tự thì thêm số 0 vào trước phần số nguyên
%lf double "%8.3lf"
%ld long "%-10ld"

Ví dụ: 
#include<stdio.h>
/*
Xuất chuỗi, độ rộng mỗi chuỗi là 20 ký tự, 
nếu không đủ 20 thì để trống phần phía trước chuỗi (tạm hiểu căn lề phải trong trường hợp này)
*/
int main() {
  	char chuoi[] = "Hello World!";
  	char chuoi1[] = "Hello!";
  	printf("\n%20s%20s", chuoi, chuoi1); 
	printf("\n%20s%20s", chuoi1, chuoi);
}

Toán tử toán học
Toán Tử Giải Thích Ví Dụ
+ Phép cộng a + b
- Phép trừ a - b
* Phép nhân a * b
/ Phép chia lấy nguyên a / b
% Phép chia lấy dư 5 % 2 = 1; vì 5 chia 2 bằng 2 DƯ 1
++ Tăng giá trị ... lên 1 đơn vị ++a
-- Giảm giá trị ... xuống 1 đơn vị --a

Toán tử gán
Toán Tử Ví Dụ Giá Trị Tương Đương
= a = 5 a = 5
+= a += 5 a = a + 5
-= a -= 5 a = a - 5
-= a -= 5 a = a - 5
*= a *= 5 a = a * 5
/= a /= 5 a = a / 5
%= a %= 5 a = a % 5

Toán tử so sánh:
Toán Tử Giải Thích Ví Dụ
== Bằng a == b
!= Không bằng hay khác a != b
> Lớn hơn a > b
< Nhở hơn a < b
>= Lớn hơn bằng a >=b
<= Nhở hơn hoặc bằng a <= b

Toán tử logic:
Toán Tử Tên Giải Thích Ví Dụ Kết quả
&& Nếu tất cả các giá trị đúng thì trả về giá trị True x < 5 && x < 10 True
|| Hoặc Trả về giá trị True nếu trong các giá trị là true x < 5 || x < 4 True
! Phủ định, đảo ngược kết quả, trả về false nếu kết quả trả về là True !(x < 5 && x < 10) ??

Chú ý:  Trong toán tử logic:
    Toán tử &(và): nếu một trong các biểu thức là sai (false) -> false
    Toán tử || (hoặc): tất cả các biểu thức đều sai (false) ->  false
    
    0 = false 
    1 = true



YÊU CẦU: Xây dựng chương trình:

Bài 1:
 
Input: nhập vào 2 số
Output: 
- Xuất ra/Hiển thị tổng, hiệu của 2 số vừa nhập
- Xuất ra/Hiển thị số lớn nhất

Bài 2: Tính chu vi diện tích hình chữ nhật
Input: Nhập vào từ bàn phím chiều dài và chiều rộng
Output: Hiển thị ra màn hình chu vi và diện tích của hình chữ nhật


Bài 3: Tính chu vi diện tích hình tròn
Input: Nhập vào bán kính của đường tròn
Output: Hiển thị ra màn hình chu vi và diện tích của hình tròn


Bài 4: Tính điểm trung bình biết hệ số của môn toán: x3, lý: x2, hóa: x1
Input: Nhập vào từ bàn phím điểm môn Toán, Lý, Hóa
Output: Hiển thị ra màn hình điểm trung bình


Bài 5:
Input: nhập vào 3 số
Output:  Xuất ra/Hiển thị số lớn nhất

THỰC HIỆN:

Bài 1: 
Input: nhập vào 2 số
Output: 
  • Xuất ra/Hiển thị tổng, hiệu của 2 số vừa nhập

Code:
#include<stdio.h>
int main()
{
	int a, b;
	printf("Nhap a: ");
	scanf("%d", &a); 
	
	printf("Nhap b: ");
	scanf("%d", &b);	
	//Output
	printf("Tong 2 so: %d",a + b);
	printf("\n"); // in ra dong trang
	
	printf("Tong 2 so: %d",a - b);	
}

  • Xuất ra/Hiển thị số lớn nhất
Code:
#include<stdio.h>

// ham tim so lon nhat
int timSoLonNhat(int a, int b){
	return (a >= b) ? a : b;
}

int main()
{
	int a, b;
	printf("Nhap a: ");
	scanf("%d", &a); 
	
	printf("Nhap b: ");
	scanf("%d", &b);
		 
	int maxNumber = timSoLonNhat(a, b); 
	printf("So lon nhat la: %d", maxNumber);
}



Bài 2: Tính chu vi diện tích hình chữ nhật
Input: Nhập vào từ bàn phím chiều dài và chiều rộng
Output: Hiển thị ra màn hình chu vi và diện tích của hình chữ nhật


Code:
#include<stdio.h>

int main()
{
	int a, b;
	printf("Nhap chieu dai: ");
	scanf("%d", &a); 
	
	printf("Nhap chieu rong: ");
	scanf("%d", &b);	
	
	printf("\n====================\n");
	printf("Chu vi Hinh chu nhat: %d", (a + b) * 2);
	printf("\n");
	printf("Dien tich Hinh chu nhat: %d", a * b);
}


Bài 3: Tính chu vi diện tích hình tròn
Input: Nhập vào bán kính của đường tròn
Output: Hiển thị ra màn hình chu vi và diện tích của hình tròn


Code:
#include<stdio.h>

int main()
{
	int r, pi;
	printf("Nhap ban kinh hinh tron: ");
	scanf("%d", &r); 
	
	pi = 3.14;
	
	printf("\n====================\n");
	printf("Chu vi Hinh chu nhat: %d", (r * 2) * pi);
	printf("\n");
	printf("Dien tich Hinh chu nhat: %d", r * r * pi);
}


Bài 4: Tính điểm trung bình biết hệ số của môn toán: x3, lý: x2, hóa: x1
Input: Nhập vào từ bàn phím điểm môn Toán, Lý, Hóa
Output: Hiển thị ra màn hình điểm trung bình


Code:
#include<stdio.h>

int main()
{
	float toan, ly, hoa;
	printf("Nhap diem mon Toan: ");
	scanf("%f", &toan); 
	printf("Nhap diem mon Ly: ");
	scanf("%f", &ly); 
	printf("Nhap diem mon Hoa: ");
	scanf("%f", &hoa); 
	
	
	printf("\n====================\n");
	printf("Diem trung binh 3 mon la: %.1f", (toan*3 + ly*2 + hoa*1)/6);
	
	printf("\n=========HOAC===========\n");
	float diemTB = (toan*3 + ly*2 + hoa*1)/6;
	printf("Diem trung binh 3 mon la (Dung bien trung gian): %.1f", diemTB);

}


Bài 5:
Input: nhập vào 3 số
Output:  Xuất ra/Hiển thị số lớn nhất

Gợi ý: tương tự như bài 1, chúng ta tìm số lớn nhất theo từng cặp
Code:
int maxTemp = timSoLonNhat(a, b); 
int maxNumber = timSoLonNhat(c, maxTemp); 
printf("So lon nhat la: %d", maxNumber);



Xong!

[Database-Tự Học SQL] COM2034_SQL Server - Lab 5: Stored Procedure Trong SQL Server

CÁC BƯỚC THỰC HIỆN STORED-PROCEDURE:
1. Khởi tạo
2. Biên dịch (chọn toàn bộ nội dung của stored-procedure -> nhấn F5)
3.Thực thi (EXEC procedure_name;)

LÝ THUYẾT:


  • Cú pháp tạo mới stored-procedure:
CREATE PROCEDURE procedure_name
AS
	BEGIN
		sql_statement  // khối lệnh cần xử lý
	END
GO;

  • Hoặc (chúng ta có thể viết đầy đủ PROCEDURE hoặc viết kiểu rút gọn PROC)
CREATE PROC procedure_name
AS
	BEGIN
		sql_statement  // khối lệnh cần xử lý
	END
GO;

  • Cú pháp sửa stored-procedure đã tồn tại:
ALTER PROCEDURE procedure_name
AS
	BEGIN
		sql_statement  // khối lệnh cần xử lý
	END
GO;

  • Cú pháp viết gộp stored-procedure:
CREATE OR ALTER PROCEDURE procedure_name // tạo mới stored-procudure, nếu đã tồn tại thì thay đổi nội dung stored-produre thành nội dung mới
AS
	BEGIN
		sql_statement  // khối lệnh cần xử lý
	END
GO;

  • Cú pháp xóa stored-procedure đã tồn tại:
DROP PROCEDURE procedure_name; // tên stored-procedure cần xóa

  • Cách thực thi stored-procedure:
EXEC procedure_name; // tên stored-procedure cần thực thi

  • Kiểm tra nội của stored-procedure đã tồn tại:
sp_helptext procedure_name; // tên stored-procedure cần kiểm tra



NỘI DUNG:

Bài 1: 
Viết stored-procedure:
+ In ra dòng ‘Xin chào’ + @ten với @ten là tham số đầu vào là tên Tiếng Việt có dấu của bạn. Gợi ý:
-  sử dụng UniKey để gõ Tiếng Việt ♦
-  chuỗi unicode phải bắt đầu bởi N (vd: N’Tiếng Việt’) ♦
-  dùng hàm cast (<biểuThức> as <kiểu>) để đổi thành kiểu <kiểu> của<biểuThức>.
+ Nhập vào 2 số @s1,@s2. In ra câu ‘Tổng là : @tg’ với @tg=@s1+@s2.
+ Nhập vào số nguyên @n. In ra tổng các số chẵn từ 1 đến @n.
+ Nhập vào 2 số. In ra ước chung lớn nhất của chúng theo gợi ý dưới đây:
-  b1. Không mất tính tổng quát giả sử a <= A
-  b2. Nếu A chia hết cho a thì : (a,A) = a ngược lại : (a,A) = (A%a,a) hoặc (a,A) = (a,A-a)
-  b3. Lặp lại b1,b2 cho đến khi điều kiện trong b2 được thỏa

Bài 2:
Sử dụng cơ sở dữ liệu QLDA, Viết các Proc:
- Nhập vào @Manv, xuất thông tin các nhân viên theo @Manv.
- Nhập vào @MaDa (mã đề án), cho biết số lượng nhân viên tham gia đề án đó
- Nhập vào @MaDa và @Ddiem_DA (địa điểm đề án), cho biết số lượng nhân viên tham gia đề án có mã đề án là @MaDa và địa điểm đề án là @Ddiem_DA
- Nhập vào @Trphg (mã trưởng phòng), xuất thông tin các nhân viên có trưởng phòng là @Trphg và các nhân viên này không có thân nhân.
- Nhập vào @Manv và @Mapb, kiểm tra nhân viên có mã @Manv có thuộc phòng ban có mã @Mapb hay không

Bài 3:
Sử dụng cơ sở dữ liệu QLDA, Viết các Proc
- Thêm phòng ban có tên CNTT vào csdl QLDA, các giá trị được thêm vào dưới dạng tham số đầu vào, kiếm tra nếu trùng Maphg thì thông báo thêm thất bại.
- Cập nhật phòng ban có tên CNTT thành phòng IT.
- Thêm một nhân viên vào bảng NhanVien, tất cả giá trị đều truyền dưới dạng tham số đầu vào với điều kiện:
 + nhân viên này trực thuộc phòng IT
 + Nhận @luong làm tham số đầu vào cho cột Luong, nếu @luong<25000 thì nhân viên này do nhân viên có mã 009 quản lý, ngươc lại do nhân viên có mã 005 quản lý
 + Nếu là nhân viên nam thi nhân viên phải nằm trong độ tuổi 18-65, nếu là nhân viên nữ thì độ tuổi phải từ 18-60

THỰC HIỆN:

Bài 1: 
Viết stored-procedure:
a. In ra dòng ‘Xin chào’ + @ten với @ten là tham số đầu vào là tên Tiếng Việt có dấu của bạn. Gợi ý:
-  sử dụng UniKey để gõ Tiếng Việt ♦
-  chuỗi unicode phải bắt đầu bởi N (vd: N’Tiếng Việt’) ♦
-  dùng hàm cast (<biểuThức> as <kiểu>) để đổi thành kiểu <kiểu> của<biểuThức>.

  • Khởi tạo stored-procedure
CREATE PROC sp_Bai1a @ten NVARCHAR(50)
AS
BEGIN
	PRINT 'Xin chào ' + CAST(@ten AS NVARCHAR);
END	
GO

Ngoài ra chúng ta cũng có viết CREATE OR ALTER PROC .... có nghĩa rằng khi thực thi nó sẽ kiểm tra xem tên của stored-procedure có tồn tại chưa nếu không có thì tạo mới nếu đã có rồi thì cập nhật

Code:
    CREATE OR ALTER PROC sp_Bai1a @ten NVARCHAR(50)
    AS
    BEGIN
    	PRINT 'Xin chào ' + cast(@ten AS NVARCHAR);
    END	
    GO
    
    • Thực thi stored-procedure
    EXEC sp_Bai1a 'tony Tèo';
    


    b. Nhập vào 2 số @s1,@s2. In ra câu ‘Tổng là : @tg’ với @tg=@s1+@s2.

    Code:
    CREATE OR ALTER PROCEDURE sp_Sum @So1 INT = 5, @So2 INT = 4
    AS
    BEGIN
    	DECLARE @tong INT;
    	SET @tong = @So1 + @So2;
    	PRINT 'Tong là: ' + cast(@tong AS NVARCHAR);
    END
    GO
    
    • Thực thi stored-procedure
    EXEC sp_Sum // nếu không truyền đối số vào thì chương trình sẽ lấy giá trị đã khởi tạo của trong chương trình để thực hiện phép tính
    EXEC sp_Sum 7,8;
    


    c. Nhập vào số nguyên @n. In ra tổng các số chẵn từ 1 đến @n.

    Code:
    CREATE PROC sp_TongChan @n INT
    AS
    BEGIN
    	DECLARE @tong INT = 0, @i INT = 1;
    	WHILE (@i <= @n)
    	BEGIN
    		IF(@i % 2= 0)
    		BEGIN
    			SET @tong = @tong + @i
    		END
    		SET @i= @i +1
    	END
    	select @tong AS 'Tong chan'
    END
    GO
    

    d. Nhập vào 2 số. In ra ước chung lớn nhất của chúng theo gợi ý dưới đây:
    -  b1. Không mất tính tổng quát giả sử a <= A
    -  b2. Nếu A chia hết cho a thì : (a,A) = a ngược lại : (a,A) = (A%a,a) hoặc (a,A) = (a,A-a)
    -  b3. Lặp lại b1,b2 cho đến khi điều kiện trong b2 được thỏa

    Code:
    CREATE PROC sp_UCLN @s3 INT,@s4 INT
    AS
    BEGIN
    	
    	WHILE (@s4 % @s3 != 0)
    	BEGIN
    		IF (@s4 > @s3)
    		SET @s4 = @s4-@s3
    		ELSE
    		SET @s3 = @s3-@s4
    	END
    	PRINT N'Ước chung lớn nhất là ' + CAST(@s3 AS VARCHAR(10))
    END
    GO
    


    Bài 2:
    Sử dụng cơ sở dữ liệu QLDA, Viết các Proc:
    - Nhập vào @Manv, xuất thông tin các nhân viên theo @Manv.

    Code:
    CREATE PROCEDURE sp_ThongtinNV @MaNV NVARCHAR(9)
    AS
    BEGIN
     SELECT * FROM NHANVIEN WHERE MaNV = @MaNV
    END
    GO
    

    - Nhập vào @MaDa (mã đề án), cho biết số lượng nhân viên tham gia đề án đó

    Code:
    CREATE PROC sp_Bai2b @MaDa INT
    AS
    BEGIN
    	SELECT MADA, count(*) AS 'SL nhan vien tg du an' 
    	FROM PHANCONG
        WHERE MADA = @MaDa
    	GROUP BY MADA
    	
    END
    GO
    

    - Nhập vào @MaDa và @Ddiem_DA (địa điểm đề án), cho biết số lượng nhân viên tham gia đề án có mã đề án là @MaDa và địa điểm đề án là @Ddiem_DA

    Code:
    CREATE PROC sp_Bai2c @MaDa INT, @Ddiem_DA NVARCHAR(15)
    AS
    BEGIN
    	SELECT PHANCONG.MADA, count(*) AS 'SL'
    	FROM DEAN, PHANCONG, CONGVIEC
    	WHERE DEAN.MADA = CONGVIEC.MADA and
        	  PHANCONG.MADA = CONGVIEC.MADA and
    		  DDIEM_DA = @Ddiem_DA	and
    		  DEAN.MADA = @MaDa	
    	GROUP BY PHANCONG.MADA
    END
    GO
    

    - Nhập vào @Trphg (mã trưởng phòng), xuất thông tin các nhân viên có trưởng phòng là @Trphg và các nhân viên này không có thân nhân.

    Code:
    CREATE PROC sp_Bai2d @Trphg NVARCHAR(9)
    AS
    BEGIN 
    	SELECT *
    	FROM NHANVIEN
    	WHERE MA_NQL = @Trphg and
    	 NHANVIEN.MANV not in (SELECT MA_NVIEN
    						   FROM THANNHAN
    						   WHERE THANNHAN.MA_NVIEN = NHANVIEN.MANV)
    END
    GO
    

    - Nhập vào @Manv và @Mapb, kiểm tra nhân viên có mã @Manv có thuộc phòng ban có mã @Mapb hay không

    Code:
    CREATE PROC sp_Bai2e @Manv NVARCHAR(9), @Mapb INT
    AS
    BEGIN
    	IF exists (SELECT * FROM nhanvien WHERE phg= @Mapb and manv = @Manv)
    		PRINT N'Có thuộc'
    	ELSE
    		PRINT N'Không Thuộc'
    END
    GO
    

    Bài 3:
    Sử dụng cơ sở dữ liệu QLDA, Viết các Proc
    - Thêm phòng ban có tên CNTT vào csdl QLDA, các giá trị được thêm vào dưới dạng tham số đầu vào, kiếm tra nếu trùng Maphg thì thông báo thêm thất bại.

    Code:
    CREATE PROC sp_InsertPhongBan @TenPHG NVARCHAR(15),
    	@MaPHG INT, @TRPHG NVARCHAR(9), @NG_NHANCHUC date
    AS
    BEGIN
    	IF EXISTS(SELECT * FROM PHONGBAN WHERE MAPHG = @MaPHG)
    		PRINT 'Da ton tai, khong them vao duoc';
    	ELSE
    		INSERT INTO PHONGBAN
    		VALUES(@TenPHG, @MaPHG,@TRPHG,@NG_NHANCHUC)
    END
    GO
    

    Thực thi stored-produre:
    Code:

    EXEC sp_InsertPhongBan 'Hanh Chinh',2,'007','2020-06-04'
    


    - Cập nhật phòng ban có tên CNTT thành phòng IT.

    Code:
    CREATE PROC sp_phongbandoiten @tenphg NVARCHAR(30)
    AS
    BEGIN
    	update phongban SET tenphg = @tenphg
    	WHERE tenphg = N'Công Nghệ Thông Tin'
    END
    Exec sp_phongbandoiten 'IT'
    GO
    
    Thực thi stored-produre:

    Code:

    Exec sp_phongbandoiten 'IT'
    

    - Thêm một nhân viên vào bảng NhanVien, tất cả giá trị đều truyền dưới dạng tham số đầu vào với điều kiện:
     + nhân viên này trực thuộc phòng IT
     + Nhận @luong làm tham số đầu vào cho cột Luong, nếu @luong<25000 thì nhân viên này do nhân viên có mã 009 quản lý, ngươc lại do nhân viên có mã 005 quản lý
     + Nếu là nhân viên nam thi nhân viên phải nằm trong độ tuổi 18-65, nếu là nhân viên nữ thì độ tuổi phải từ 18-60

    Code:
    CREATE PROC sp_InsertNhanVien
    @honv NVARCHAR(15),@tenlotnv NVARCHAR(15), @tennv NVARCHAR(15),@manv NVARCHAR(9),
    @ngsinh date,@dchi NVARCHAR(30), @phai NVARCHAR(3),@luong float, @ma_nql NVARCHAR(9), @phg INT
    AS
    BEGIN
    	IF (@phg = (SELECT maphg FROM phongban WHERE tenphg ='IT'))
    	BEGIN
    		IF(@luong < 25000)
    		BEGIN
    			SET @ma_nql = '009'
    			insert into nhanvien
    			values(@honv,@tenlotnv,@tennv,@manv,@ngsinh,@dchi,@phai,@luong,@ma_nql,@phg)
    		END
    		ELSE
    		BEGIN
    			SET @ma_nql = '005'
    			insert into nhanvien
    			values(@honv,@tenlotnv,@tennv,@manv,@ngsinh,@dchi,@phai,@luong,@ma_nql,@phg)
    		END
    		IF (@phai = 'Nam')
    		BEGIN
    			IF(datedIFf(yy,@ngsinh,getdate()) between 18 and 65)
    			BEGIN
    				insert into nhanvien
    				values(@honv,@tenlotnv,@tennv,@manv,@ngsinh,@dchi,@phai,@luong,@ma_nql,@phg)
    			END
    			ELSE
    			PRINT N'Không thỏa'
    		END
    		ELSE
    		BEGIN
    			IF(datedIFf(yy,@ngsinh,getdate()) between 18 and 60)
    			BEGIN
    				insert into nhanvien
    				values(@honv,@tenlotnv,@tennv,@manv,@ngsinh,@dchi,@phai,@luong,@ma_nql,@phg)
    			END
    			ELSE
    			PRINT N'Không Thỏa'
    		END
    	END
    	ELSE
    	PRINT N'NHAN VIEN PHONG IT MOI THEM DUOC'
    END
    GO
    

    Thực thi stored-produre:

    Code:
    Exec sp_InsertNhanVien N'Nguyễn',N'Văn',N'Tèo','010','1975-04-30','30 Lê Văn Sỹ','Nam',25000,1,6
    


    Xong!

    [Tự Học Lập Trình C - Qua Các Bài Tập] COM108_Nhập Môn Lập Trình - Bài 1 - Output

    NỘI DUNG:
    1. Cài đặt DEV-C++
    2. Xây dựng chương trình đầu tiên - Output


    THỰC HIỆN:

    1. Cài đặt DEV-C++

    1.1 Tải phần mềm tại đây

    1.2 Hướng dẫn cài đặt và cách debug chương trình
    • Cài đặt

    • Chạy chương trình lần đầu tiên


    • Cách tạo soạn thảo code và lưu file: File -> New -> Source File (Ctrl + N); File -> Save (Ctrl + S)


    • Cách dịch và thực thi file code hiện hành: Execute -> Complile  & Run (F11)

    • Cài đặt hỗ trợ debug chương trình: Tools -> Compiler Options.. -> chọn TDM-GCC 492 64-bit Debug -> General -> chọn Add the following commands when calling the complier và thêm -g ->  chọn Add the following commands when calling the linker thêm -static-libgcc -> OK

    • Các bước debug chương trình:
    - Mở chương trình cần debug lên chạy
    - Chạy chương lần đầu tiên Complile & Run hay nhấn F11
    - Chọn vị trí cần debug - breakpoints
    - Chọn biến cần hiển thị trong quá trình debug -> Add watch (kết quả tạm thời của debug sẽ hiển thị chổ này)
    - Thực hiện debug hay nhấn phím F5
    - Nhấn phím F7 để thực hiện bước tiếp theo.

    Có thể tham khảo video cách debug Dev-C++ tại đây

    2. Xây dựng chương trình đầu tiên - Output
    • Cấu trúc cơ bản chương trình C++


    • Tìm hiểu hàm/ký hiệu
    printf: hàm để xuất/in ra màn hình
    \n: Ký tự xuống hàng/dòng mới
    //: Ghi chú một dòng (những gì sau dấu // chương trình sẽ không thực thi)
    /* Ghi chú khối lệnh*/: Nội dung trong cặp /**/ máy tính sẽ không thực thi

    • Chương trình đầu tiên - Hello world: Yêu cầu viết chương trình xuất ra màn hình theo yêu cầu:
    - Dòng chữ "Hello World!"
    - Xuống dòng
    - Dòng "Toi hoc nhap mon lap trinh - COM108!"

     Code:

    #include<stdio.h>
    int main()
    {
    	printf("Hello World!\n");
    	printf("Toi hoc nhap mon lap trinh - COM108!");
    }
    

    Kết quả: Lưu file ->  thực thi chương trình -> Execute -> Complile  & Run (F11)





    Xong!

    [Tin Học Văn Phòng] COM1071 - Bài 4 - Ms Excel & Các Hàm Căn Bản

    MỤC TIÊU: 

    Biết cách định dạng bảng tính căn bản và biết cách sử dụng các hàm: 
    • Phân tách chuỗi: Left, Right, Mid, Len,...
    • Cách viết chuỗi: Upper, Lower, Proper, Trim,...
    • Tìm kiếm, thay thế, lặp lại ký tự: Find, Search, Replace, Substitute, Rept, ...
    • Các thành phần trong Ngày-Tháng-Năm: Day, Month, Year, Date, Today,...
    • Giờ phút giây: Hour, Minute, Second, Time, Now, ...
    • Biết cách tính khoảng cách giữa 2 mốc thời gian
    • Thống kê, xếp hạng: Max, Min, Average, Rank, Sum, ...
    • Địa chỉ tuyệt đối


    NỘI DUNG:

    1. Định dạng bảng tính
    2. Các hàm căn bản và địa chỉ tuyệt đối
    • Tìm hiểu các hàm xử lý chuỗi căn bản
    • Tìm hiểu các hàm xử lý date căn bản
    • Tìm hiểu các hàm thống kê, sắp xếp và địa chỉ tuyệt đối


    THỰC HIỆN:

    1. Định dạng bảng tính
    updating

    2. Các hàm căn bản và địa chỉ tuyệt đối
    • Tìm hiểu các hàm xử lý chuỗi căn bản
    - Phân tách chuỗi: Left, Right, Mid, Len,...
    - Cách viết chuỗi: Upper, Lower, Proper, Trim,...

     

    - Tìm kiếm, thay thế, lặp lại ký tự: Find, Search, Replace, Substitute, Rept, ...

     

    • Tìm hiểu các hàm xử lý date căn bản
    - Các thành phần trong Ngày-Tháng-Năm: Day, Month, Year, Date, Today,...
    - Giờ phút giây: Hour, Minute, Second, Time, Now, ...
    - Biết cách tính khoảng cách giữa 2 mốc thời gian

      • Tìm hiểu các hàm thống kê, sắp xếp và đại chỉ tuyệt đối
      - Thống kê, xếp hạng: Max, Min, Average, Rank, Sum, ...
      - Địa chỉ tuyệt đối


        Xong!

        [Tự Học Java] MOB1014-Java 1 - Bài 7 - Ghi Đè/Overriding - P2/2

        NỘI DUNG:
        1. Overrding
        2. Bài tập

        THỰC HIỆN:
        1. Overriding 
        • Khi lớp con và lớp cha có cùng phương thức và cùng cú pháp (phương thức có tên giống nhau và có cùng các tham số truyền vào) nên phương thức của lớp con sẽ ghi đè lên phương thức của lớp cha

        • Ghi đè phương thức được sử dụng để thu được tính đa hình tại thời điểm đang chạy/runtime
        Ví dụ đa hình:
        class Shape {
            void draw() {
                System.out.println("drawing...");
            }
        }
        
        class Circle extends Shape {
            void draw() {
                System.out.println("drawing circle...");
            }
        }
         
        class Triangle extends Shape {
            void draw() {
                System.out.println("drawing triangle...");
            }
        }
        class Rectangle extends Shape {
            void draw() {
                System.out.println("drawing rectangle...");
            }
        }
        class ViDu_DaHinh {
            public static void main(String args[]) {
                Shape s;
                s = new Circle();
                s.draw();
                s = new Triangle();
                s.draw();
                s = new Rectangle();
                s.draw();
            }
        }
        


        Các điểm cần chú ý:
        - Lớp con ghi đè phương thức của lớp cha thì sẽ che dấu phương thức của lớp cha
        - Mục đích của ghi đè là để sửa lại phương thức của lớp cha trong lớp con
        - Sử dụng từ khóa super để truy cập đến phương thức đã bị ghi đè của lớp cha.
        - Đặc tả truy xuất của phương thức lớp con phải có độ công khai bằng hoặc hơn đặc tả truy xuất của phương thức lớp cha.


        Ví dụ:
        - Yêu cầu tương tự phần Kế thừa/Inheritance  ở phần 1
        - Bổ sung lớp LaoCong với cách tính lương là tùy theo số giờ làm việc.
        - Thêm phương thức getThuNhap cho các lớp NhanVien
        - Thực hiện ghi đè/overriding cho lớp TruongPhong, LaoCong sao cho phù hợp cách tính lương mỗi lớp tương ứng
        - Viết chương trình để gán dữ liệu cho các lớp nói trên và hiển thị thông dữ liệu hiện tại của các lớp (tính đa hình của phương thức getThuNhap).

        Gợi ý:
        - Bổ sung lớp LaoCong với cách tính lương là tùy theo số giờ làm việc.
        import java.util.Scanner;
        
        public class LaoCong extends NhanVien{
            int soGioLamViec;
        
            // GETTER & SETTER
            public int getSoGioLamViec() {
                return soGioLamViec;
            }
        
            public void setSoGioLamViec(int soGioLamViec) {
                this.soGioLamViec = soGioLamViec;
            }
        
            // CONSTRUCTOR
            public LaoCong(int soGioLamViec, String tenNhanVien, double mucLuong) {
                super(tenNhanVien, mucLuong);
                this.soGioLamViec = soGioLamViec;
            }
        }
        

        - Thêm phương thức getThuNhap cho các lớp NhanVien
        public double getThuNhap(){
                return mucLuong;
            }
        

        - Thực hiện ghi đè/overriding cho lớp TruongPhong, LaoCong sao cho phù hợp cách tính lương mỗi lớp tương ứng

        TruongPhong:
        @Override
            public void hienThi(){
                super.hienThi(); // goi phuong thuc hien thi tu lop cha-NhanVien
                
                System.out.println("- Phu Cap Chuc Vu: " + phuCapChucVu);
            }
              
            @Override
            public void nhapDuLieu(){
                Scanner sc = new Scanner(System.in);
                super.nhapDuLieu(); 
                
                System.out.print("Phu Cap Chuc Vu:");
                phuCapChucVu = sc.nextDouble();
            }
        
            // phan 2
            @Override
            public double getThuNhap() {
                return super.getMucLuong() + getPhuCapChucVu();
            }
        

        LaoCong:
        // GHI DE
            @Override
            public void nhapDuLieu() {
                Scanner sc = new Scanner(System.in);
                System.out.print("Ho ten LC: ");
                tenNhanVien = sc.nextLine();
                System.out.print("So gio lam viec: ");
                soGioLamViec = sc.nextInt();
            }
        
            @Override
            public double getThuNhap() {
                return  getSoGioLamViec() * 50000;
            }
        
            @Override
            void hienThi() {
                System.out.println("- Ho Ten: " + getTenNhanVien());
                System.out.println("- Muc Luong: " + getThuNhap());
            }
        

        Full Code tham khảo:

        NhanVien
        import java.util.Scanner;
        
        public class NhanVien {
            public String tenNhanVien;
            protected  double mucLuong;
        
            // GETTER & SETTER
            public String getTenNhanVien() {
                return tenNhanVien;
            }
        
            public double getMucLuong() {
                return mucLuong;
            }
        
            public void setTenNhanVien(String tenNhanVien) {
                this.tenNhanVien = tenNhanVien;
            }
        
            public void setMucLuong(double mucLuong) {
                this.mucLuong = mucLuong;
            }
        
            // CONSTRUCTOR
            public NhanVien(String tenNhanVien, double mucLuong) {
                this.tenNhanVien = tenNhanVien;
                this.mucLuong = mucLuong;
            }
            
            // NHAP LIEU, PUBLIC
            public void nhapDuLieu(){
                Scanner sc = new Scanner(System.in);
                System.out.print("Ho ten: ");
                tenNhanVien = sc.nextLine();
                System.out.print("Luong: ");
                mucLuong = sc.nextDouble();
            }
            
            // IN/HIEN THI, MAC DINH
            void hienThi(){
                System.out.println("- Ho Ten: " + tenNhanVien);
                System.out.println("- Muc Luong: " + mucLuong);
            }
            
            // PRIVATE, lop con se khong duoc ke thua
            private double thueThuNhap(){
                if(mucLuong < 5000000){
                    return 0;
                }else{
                    return (mucLuong - 5000000)*10/100;
                }
            }
            
            // phan 2 - THU NHAP MAC DINH SE LA MUC LUONG
            public double getThuNhap(){
                return mucLuong;
            }
        }
        

        TruongPhong
        import java.util.Scanner;
        
        public class TruongPhong extends NhanVien{
            public double phuCapChucVu;
        
            // GETTER & SETTER
            public double getPhuCapChucVu() {
                return phuCapChucVu;
            }
        
            public void setPhuCapChucVu(double phuCapChucVu) {
                this.phuCapChucVu = phuCapChucVu;
            }
        
            // CO THE DUNG CONSTRUCTOR TU DONG DE TAO RA
            public TruongPhong( String tenNhanVien, double mucLuong, double phuCapChucVu) {
                super(tenNhanVien, mucLuong);
                this.phuCapChucVu = phuCapChucVu;
            }
            
            @Override
            public void hienThi(){
                super.hienThi(); // goi phuong thuc hien thi tu lop cha-NhanVien
                
                System.out.println("- Phu Cap Chuc Vu: " + phuCapChucVu);
            }
              
            @Override
            public void nhapDuLieu(){
                Scanner sc = new Scanner(System.in);
                super.nhapDuLieu(); 
                
                System.out.print("Phu Cap Chuc Vu:");
                phuCapChucVu = sc.nextDouble();
            }
        
            // phan 2
            @Override
            public double getThuNhap() {
                return super.getMucLuong() + getPhuCapChucVu();
            }
                
        }
        

        LaoCong
        import java.util.Scanner;
        
        public class LaoCong extends NhanVien{
            int soGioLamViec;
        
            // GETTER & SETTER
            public int getSoGioLamViec() {
                return soGioLamViec;
            }
        
            public void setSoGioLamViec(int soGioLamViec) {
                this.soGioLamViec = soGioLamViec;
            }
        
            // CONSTRUCTOR
            public LaoCong(int soGioLamViec, String tenNhanVien, double mucLuong) {
                super(tenNhanVien, mucLuong);
                this.soGioLamViec = soGioLamViec;
            }
            
            // GHI DE
            @Override
            public void nhapDuLieu() {
                Scanner sc = new Scanner(System.in);
                System.out.print("Ho ten LC: ");
                tenNhanVien = sc.nextLine();
                System.out.print("So gio lam viec: ");
                soGioLamViec = sc.nextInt();
            }
        
            @Override
            public double getThuNhap() {
                return  getSoGioLamViec() * 50000;
            }
        
            @Override
            void hienThi() {
                System.out.println("- Ho Ten: " + getTenNhanVien());
                System.out.println("- Muc Luong: " + getThuNhap());
            }
        }
        

        Main_DaHinh 
        public class Main_DaHinh {
            public static void main(String[] args) {
                  NhanVien nv1 = new NhanVien("Van Cong Khanh", 1500000);
                  nv1.hienThi();    
                  
                  TruongPhong tp1 = new TruongPhong("Ten ong TRUONG PHONG", 2000000, 500000);
                  tp1.hienThi();
                  
                  LaoCong lc1 = new LaoCong(50, "Tran Van Ku Teo", 50000);
                  lc1.hienThi();
                  
            }
        }
        

        2. Bài tập:

        7.2.2.1
        Tạo lớp SinhVienPoly gồm 2 thuộc tính họ tên và ngành cùng với phương thức trừu tượng là getDiem(). Thêm phương thức getHocLuc() để xếp loại học lực. Lớp cũng bao gồm một phương thức xuat() để xuất họ tên, ngành, điểm và học lực ra màn hình.

        Hướng dẫn:
        - Xây dựng lớp có mô hình
        - Vì chưa biết sinh viên này học những môn nào nên chưa tính được điểm vì vậy phương thức getDiem() phải là phương thức trừu tượng
        - Chú ý lớp SinhVienPoly phải là lớp trừu tượng vì có phương thức getDiem() là phương thức trừu tượng
        - Phương thức getHocLuc() được viết bình thường vẫn sử dụng phương thức getDiem() để lấy điểm của sinh viên mặc dù hiện tại vẫn chưa biết điểm được tính thế nào. Học lực được tính như sau
        o Yếu: điểm < 5
        o Trung bình: 5 <= điểm < 6.5
        o Khá: 6.5 <= điểm < 7.5
        o Giỏi: 7.5 <= điểm < 9
        o Xuất sắc: điểm >= 9



        Xong!

        Chuyển Đổi Thập Phân Sang Bát Phân và Ngược Lại/Convert Decimal To Octal

        A. Thập phân sang bát phân

        Cũng giống như cách chuyển đổi cơ số từ thập phân sang nhị phân, để chuyển cơ số 10 sang cơ số 8 ta cũng phải thực hiện lưu lại kết quả chia dư số ở hệ thập phân cho 8, sau đó chia số đó cho 8. Cứ lặp lại chừng nào số cần chuyển còn lớn hơn 1. 


        Ví dụ: 

        A.1. Chuyển 1309 từ hệ thập phân sang hệ bác phân


        A.2. Chuyển 20202 từ hệ thập phân sang hệ bác phân



        B. Bát phân sang thập phân


        Ví dụ: Chuyển các số sau đây từ hệ Bát phân sang Thập phân: 37, 473, 1275, 2022
        • 37 = (3 × 8¹) + (7 × 8⁰) = 24 + 7 = 31
        • 473 = (4 × 8²) + (7 × 8¹) + (3 × 8⁰) = 256 + 56 + 3 = 315
        • 1275 = (1 × 8³) + (2 × 8²) + (7 × 8¹) + (5 × 8⁰) = 701
        • 2022 = (2 × 8³) + (0 × 8²) + (2 × 8¹) + (2 × 8⁰) = 1042
        /*header slide*/