Cấu trúc câu lệnh trong PHP

Câu điều kiện

  • Câu điều kiện là câu lệnh chúng ta thường xuyên sử dụng khi viết mã cho bất kì ngôn ngữ lập trình nào.
  • Câu điều kiện giúp chúng ta thực hiện những hành động khác nhau trong những điều kiện khác nhau.
  • Hai nhóm loại câu điều kiện
    • IF…ELSE
      • IF
      • IF … ELSE
      • IF … ELSE IF … ELSE
      • Ví dụ
<?php

$number = 12;

if($number &gt;= 0) {

Echo “Số dương”;

}

?>

Câu điều kiện SWITCH

  • Câu điều kiện switch có một điều kiện mặc định, nghĩa là khi giá trị đưa vào không thỏa mãn một điều kiện nào thì nó sẽ lấy các câu lệnh trong phần điều kiện mặc định để thực hiện.

Vòng lặp

  • Vòng lặp là một đoạn mã lệch trong chương trình được thực hiện lặp đi lặp lại cho đến khi thỏa mãn một điều kiện nào đó.
  • Trong PHP chúng ta có 4 loại vòng lặp
    • for
    • while
    • do … while
    • for … each
  • Vòng lặp for:
  • Vòng lặp while:
  • Vòng lặp do … while:
  • Break – continue
    • Câu lệnh break có chức năng thoát khỏi một vòng lệnh. Nó có thể được sử dụng để nhảy ra khỏi một vòng lặp
    • Câu lệnh continue có chức năng dừng vòng lặp tại giá trị đó và nhảy sang giá trị khác trong vòng lặp.
while (condition) {

continue;

break;

}

Toán tử trong PHP

  • Toán tử trong PHP

    • Toán tử số học: + – * / %
    • Toán tử gán: += -= *= /= %=
    • Toán tử ++ —
    • Toán tử so sánh > < >= <= == === != <> !===
    • Toán tử logic AND OR XOR && || !
    • Toán tử điều kiện
  • Thực hiện

    + – * /

<?php
 
  $x = 2;
 
  $y = $x + 2;
 
?>
  • Các toán tử này nằm trong nhóm “Toán tử số học”, trong nhóm này chúng ta còn có thể thực hiện các phép toán
    • % chia lấy phần dư
    • – phủ định của một số
  • Toán tử gán:

<?php
 
  $x = 2;
 
  $x *= 5;
 
?>
  • Chúng ta có thể áp dụng cách viết này cho các trường hợp + – * /
  • Cách viết này thuộc nhóm “toán tử gán”: += -= *= /=
  • ++$x và $x++ có gí khác nhau:
    • ++$x tăng $x lên một đơn vị, sau đó trả về giá trị của $x
    • $x++ trả về giá trị của $x, sau đó tăng x lên một đơn vị
    • –$x giảm $x xuống một đơn vị, sau đó trả về giá trị của $x
    • $x— trả về giá trị của $x, sau đó giảm x xuống một đơn vị
  • Toán tử so sánh:

    • == so sánh bằng
    • === so sánh bằng tuyệt đối
    • != so sách khác
    • !=== so sách khác tuyệt đối
    • <> so sánh khác
  • Toán tử logic

    • ! phủ định của một giá trị nào đó
  • Toán tử điều kiện

    • Cú pháp: (condition) ? value1 : value2;
    • Ví dụ:
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8”>
 
<?php
 
$variable = “PHP training”;
 
$result = (is_string($variable)) ? “Chuỗi” : “Không phải chuỗi”;
 
 
 
echo $result;
 
?>

Biến và Hằng trong PHP

Biến là gì?

  • Biến là một giá trị có thể thay đổi khi chương trình thực thi. Khi biến được tạo sẽ xuất hiện một vùng nhớ để lưu trữ.
  • Biến trong PHP chỉ tồn tại trong thời gian server phát sinh trang web. Sau khi đã phát trinh xong trang web, tất cả các biến đều bị xóa đi.
  • Một biến gồm 2 thành phàn cơ bản: tên biến và giá trị của biến

<?php

$firstName = “John”;

$lastName = “Smith”;

$number = 12;

?>

  • Quy định khi đặt tên biến:
    • Tên biến phải bắt đầu bằng 1 kí tự hoặc ký tự gạch dưới (ký hiệu _).
    • Tên biến chỉ bao gồm ký tự chữ, ký tự số và gạch dưới.
    • Không chứa ký tự khoảng trắng trong tên biến.
    • Phân biệt chữ hoa và chứ thường.
  • Giá trị
    • Khi các giá trị của biến được đặt trong dấu ngoặc kép (hoặc dấu ngoặc đơn) cho biết biến đó lưu trữ giá trị kiểu chuỗi.
    • Ngược lại cho biết biến đó lưu trữ giá trị kiểu số.
  • Ngoài kiều chuỗi, trong PHP còn có kiểu dữ liệu
    • Các kiểu dữ liệu thường được sử dụng trong PHP: string, numberic, bloolean, null, array, object.
    • Tạm thời chúng ta sẽ tập trung vào kiểu string và kiểu numberic. Các kiểu dữ liệu khác chúng ta sẽ được giới thiệu sau.
  • Chúng ta có 2 cách sau đề xác định kiểu dữ liệu của một biến nào đó:
    • Sử dụng hàm gettype()
    • Sử dụng hàm var_dump()
  • Có thể chuyển đổi dữ liệu của một biến nào đó hay không ?
    • Chúng ta hoàn toàn có thể chuyển đổi kiểu dữ liệu của một biến nào đó, bằng cách thực hiện một trong hai cách sau:
      • Sử dụng ép kiểu.
      • Sử dụng settype()
      • Để kiểm tra kiểu dữ liệu của một biến nào đó chúng ta có thể dùng các hàm is_numeric(), is_float(), is_string(), is_array(), is_object(), ….Hàm để kiểm tra kiểu dữ liệu của một biến:

Hằng số trong PHP

  • Khác với biến, hảng số là giá trị không thể thay đổi được.
  • Định nghĩa hằng
<?php

define(“PI”, 3.14);

echo “Value PI: ” . PI;

?>

QBMST – spoj

Đề bài:

Thuật toán:

Code:

#include <iostream>
#include <vector>
#include <algorithm> // Hàm sort
using namespace std;
 
// Cấu trúc để lưu cạnh đồ thị,
// u, v là 2 đỉnh, w là trọng số cạnh
struct edge {
    int u, v, w;
};
// Hàm so sánh để dùng trong hàm sort ở dưới
bool cmp(const edge &a, const edge &b) {
    return a.w < b.w;
}
 
// Số đỉnh tối đa trong đề bài
#define N 10005
 
// 2 mảng sử dụng trong Disjoint Set
int cha[N], hang[N];
 
// Tìm xem u thuộc cây nào
int find(int u) {
    if (cha[u] != u) cha[u] = find(cha[u]);
    return cha[u];
}
 
// Hợp nhất 2 cây chứ u và v,
// Trả về false nếu không thể hợp nhất
bool join(int u, int v) {
    u = find(u); v = find(v);
    if (u == v) return false;
    if (hang[u] == hang[v]) hang[u]++;
    if (hang[u] < hang[v]) cha[u] = v;
    else cha[v]=u;
    return true;
}
 
int main() {
    // Thêm dòng này để cin, cout chạy nhanh
    ios::sync_with_stdio(false); cin.tie(0);
 
    // Nhập vào số đỉnh và số cạnh
    int n, m; cin >> n >> m;
 
    // Nhập danh sách các cạnh
    vector<edge> edges(m);
    for (edge &e: edges) cin >> e.u >> e.v >> e.w;
 
    // Sắp xếp lại các cạnh theo trọng số tăng dần
    sort(edges.begin(), edges.end(), cmp);
 
    // Khởi tạo cấu trúc Disjoint Set
    for (int i=1; i<=n; i++) {
        cha[i] = i;
        hang[i] = 0;
    }
 
    // Lưu tổng trọng số các cạnh trong cây khung nhỏ nhất
    int mst_weight = 0;
 
    // Duyệt qua các cạnh theo thứ tự đã sắp xếp
    for (edge &e: edges) {
        // Thử hợp nhất 2 cây chứa u và v
        if (join(e.u, e.v)) {
            // Hợp nhất thành công, ta thêm e và kết quả
            mst_weight += e.w;
        }
    }
 
    // Xuất kết quả
    cout << mst_weight;
    return 0;
}
const   fi='';
        fo='';
        maxn=10003;
        maxc=trunc(1e9);
        maxm=15000;
var     link,head,ke,ts :array[-maxm..maxm] of longint;
        i,j,n,m :longint;
        d       :array[1..maxn] of longint;
        h,p     :array[1..maxn] of longint;
        nh,res  :longint;
procedure add(i,u,v,w:longint);
begin
        link[i]:=head[u];
        head[u]:=i;
        ke[i]:=v;
        ts[i]:=w;
end;
procedure enter;
var     i,u,v,w :longint;
begin
        assign(input,fi);reset(input);
        readln(n,m);
        for i:=1 to m do
                begin
                        read(u,v,w);
                        add(i,u,v,w);
                        add(-i,v,u,w);
                end;
        close(input);
end;
procedure swap(var x,y:longint);
var     tg      :longint;
begin
        tg:=x;x:=y;y:=tg;
end;
procedure upheap(i:longint);
var     j:longint;
begin
        j:=i div 2;
        if i>1 then
        if d[h[j]]>d[h[i]] then
                begin
                        swap(h[i],h[j]);
                        swap(p[h[i]] , p[h[j]] );
                        upheap(j);
                end;
end;
procedure downheap(i:longint);
var     j :longint;
begin
        j:=i+i;
        if j>nh then exit;
        if (j<nh) and (d[h[j]]>d[h[j+1]]) then inc(j);
        if d[h[i]]>d[h[j]] then
                begin
                        swap(h[i],h[j]);
                        swap(p[h[i]] , p[h[j]]);
                        downheap(j);
                end;
end;
function pop:longint;
begin
        pop:=h[1];
        h[1]:=h[nh];
        p[h[1]]:=1;
        dec(nh);
        downheap(1);
end;
procedure push(i:longint);
begin
        inc(nh);
        h[nh]:=i;
        p[i]:=nh;
        upheap(nh);
end;
procedure update(i:longint);
begin
        if p[i]=0 then push(i) else
                begin
                        upheap(p[i]);
                end;
end;
procedure process;
var     i,u,v   :longint;
begin
        for i:=1 to n do
                d[i] := maxc;
        d[1] := 0; push(1);
        repeat
                u:=pop;
                res := res + d[u];
                i:=head[u];
                while i<>0 do
                        begin
                                v:=ke[i];
                                if d[v]>ts[i] then
                                        begin
                                                d[v]:=ts[i];
                                                update(v);
                                        end;
                                i := link[i];
                        end;
        until nh=0;
end;
procedure print;
begin
        assign(output,fo);rewrite(output);
        writeln(res);
        close(output);
end;
begin
        enter;
        process;
        print;
end.

Biến toàn cục, biến cục bộ là gì?

Biến toàn cục

  • Vị trí biến đặt bên ngoài tất cả các hàm, cấu trúc…
  • Các biến có ảnh hưởng tới toàn bộ chương trình

Biến cục bộ

  • Vị trí biến đặt bên trong hàm, cấu trúc…
  • Chỉ ảnh hưởng nội bộ bên trong hàm & cấu trúc đó

Điểm khác nhau giữa double và float

Đối với các số thực, chúng ta thường sử dụng float, double và double double.

floatdouble có gì khác nhau?

double có độ chính xác gấp 2 lần float.

float là 32 bit IEEE 754 single precision Floating Point Number, 1 bit cho dấu, (8 bit cho số mũ và 23 * cho giá trị), tức là float có 7 chữ số thập phân có độ chính xác.

double là 64 bit IEEE 754 double precision Floating Point Number (1 bit cho dấu, 11 bit cho số mũ và 52 bit cho giá trị), nghĩa là double có 15 chữ số thập phân có độ chính xác.

Điểm mạnh hơn của C so với các ngôn ngữ khác

C là một ngôn ngữ lập trình cấp trung (middle level language) phát triển bởi Dennis Ritchie trong những năm đầu của thập kỷ 70 khi đang làm việc tại AT & T Bell Labs ở Mỹ. Mục tiêu phát triển NNLT C trong bối cảnh thiết kế lại hệ điều hành UNIX để cho phép nó được sử dụng trên nhiều máy tính.

Là một ngôn ngữ bậc cao (high level language), B cho phép sản xuất mã nhanh hơn nhiều so với hợp ngữ (assembly language). Tuy nhiên, B bị ảnh hưởng bởi những hạn chế vì nó không có các kiểu dữ liệu (data-types) và không cung cấp việc sử dụng “cấu trúc” (structures)

Những trở ngại này đã trở thành động lực cho Ritchie phát triển một ngôn ngữ lập trình mới mang tên C. Ông giữ lại hầu hết các cú pháp của ngôn ngữ B và thêm các kiểu dữ liệu và nhiều thay đổi cần thiết khác. Cuối cùng C đã được phát triển trong giai đoạn 1971-73, bao gồm cả chức năng cấp cao và các tính năng chi tiết được yêu cầu để lập trình một hệ điều hành. Do đó, nhiều thành phần trong UNIX hay bao gồm bản thân hạt nhân UNIX cuối cùng đã được viết lại bằng C.
Do đó, nhiều thành phần UNIX bao gồm bản thân hạt nhân UNIX cuối cùng đã được viết lại trong C.

Điểm mạnh của ngôn ngữ C

  • Là một ngôn ngữ cấp trung, C kết hợp các tính năng của cả hai ngôn ngữ cấp cao và cấp thấp. Nó có thể được sử dụng cho lập trình thâm nhập sâu vào phần cứng, chẳng hạn như lập trình nhúng, lập trình hệ điều hành… và nó cũng hỗ trợ chức năng của các ngôn ngữ lập trình bậc cao, chẳng hạn như scripting cho software applications…
  • C là một ngôn ngữ lập trình có cấu trúc cho phép một chương trình phức tạp được chia thành các chương trình đơn giản gọi là các hàm. Nó cũng cho phép di chuyển dữ liệu dễ dàng giữa các hàm mà ta vẫn thường thấy ở các ngôn ngữ lập trình hiện đại.
  • Các tính năng khác nhau của C bao gồm truy cập trực tiếp các API phần cứng của máy, sự hiện diện của trình biên dịch C, sử dụng tài nguyên máy và cấp phát bộ nhớ động làm cho ngôn ngữ C là sự lựa chọn tối ưu cho các ứng dụng scripting và trình điều khiển các hệ thống nhúng.
  • Ngôn ngữ C phân biệt chữ hoa và chữ thường có nghĩa chữ thường và chữ hoa được coi như khác nhau.
  • C rất tiện dụng và được sử dụng cho các ứng dụng hệ thống, tạo thành một phần lớn của hệ điều hành Windows, UNIX và Linux.
  • C là một ngôn ngữ lập trình đa mục đích và hiệu quả, có thể làm việc trên các ứng dụng doanh nghiệp, game, đồ hoạ, và các ứng dụng yêu cầu tính toán, tài chính, chứng khoán…
  • Ngôn ngữ C có một thư viện phong phú cung cấp một số chức năng tích hợp. Nó cũng cung cấp sự phân bổ bộ nhớ động.
  • C thực hiện các thuật toán và cấu trúc dữ liệu nhanh chóng, tạo điều kiện tính toán nhanh hơn trong các chương trình. Điều này đã thể hiện trong sự sử dụng C trong các ứng dụng yêu cầu độ tinh toán cao hơn như MATLAB và Mathematica.
  • C nhanh hơn hầu hết các ngôn ngữ khác như Python, C++, Java… Đó là một lý do thuyết phục để một vài người sử dụng C thay cho C++…

 

Minh xin kết thúc bài viết ở đây. Nếu các bạn có ý kiến thì xin để lại ở phần comment