1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Kỹ thuật lập trình: Ôn tập - Trịnh Tấn Đạt

56 56 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 56
Dung lượng 1,33 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Kỹ thuật lập trình: Ôn tập giúp người học ôn tập lại các kiến thức: Hàm, mảng, kiểu struct, tạo số ngẫu nhiên trong C/C++, giới thiệu ma trận thưa (sparse matrix) vs. dense matrix (option). Mời các bạn cùng tham khảo.

Trang 1

Ôn Tập Function, Array, Struct

Trịnh Tấn Đạt

Khoa CNTT - Đại Học Sài Gòn

Email: trinhtandat@sgu.edu.vn

Website: https://sites.google.com/site/ttdat88/

Trang 2

▪ Tạo số ngẫu nhiên trong C/C++

▪ Giới thiệu Ma trận thưa (sparse matrix) vs dense matrix (option)

Trang 3

Macro vs Function

▪ Macro: được dùng để chỉ những định nghĩa được viết ở phần Preprocessor, thay vìđặt nó vào trong phần thực thi của file nguồn

Ví dụ : #define TONG_HAI_SO(x, y) (x) +(y)

▪ Function: là một loại chương trình con, gồm tên hàm, các tham số và thân hàm(chứa các phát biểu chương trình), thực thi một việc cụ thể

Ví dụ: int TongHaiSo(int x, int y)

{

return x+y;

}

Trang 4

int a = 5, b = 7;

printf("\nMAX= %d", timMax (a, b) );

return 0 ; }

int timMax( int x , int y ) {

return ((x) > (y) ? (x) : (y));

}

Gọi hàm

Định nghĩa hàm

Trang 5

Ví Dụ

Hàm có giá trị trả về và hàm void

int main() {

// khai bao prototype

int power(int, int);

void power_2(int, int);

Trang 6

Ví Dụ

Tham chiếu và tham trị

int main() {

int ia = 5, ib = 5;

thamtri(ia, ib);

// ia = 5 ; ib = 5 printf("a = %d, b = %d\n", ia, ib);

thamchieu(ia, ib);

// ia =6; ib= 6 printf("a = %d, b = %d\n", ia, ib);

Tăng giá trị của biến lên một đơn vị

toán tử địa chỉ &

tham số hình thức và tham số thực cùng địa chỉ mọi thay đổi đối với tham số hình thức cũng làm thay đổi tham số thực.

các thay đổi cho tham số hình thức (trong hàm) không làm thay đổi đối với tham số thực.

Trang 7

printf("global_var in local func:%d\n", global_var); // 10

int global_var = 5; // biến cục bộ

printf("local_var:%d\n", global_var); // 5

}

Biến global_var = 5 khai báo trong hàm local_func chỉ có ảnh hưởng trong phạm vi hàm và chu trình sống của nó bắt đầu từ lúc gọi hàm đến khi thực hiện xong

Trang 8

Array: 1D-Array

▪ Chỉ số của mảng bắt đầu từ 0 -> N-1 ( với N là số lượng phần tử của mảng)

▪ Toán tử [] : toán tử lấy chỉ số (chi dùng khi các dãy vùng nhớ liên tiếp)

Trang 9

Ví dụ:

Các thao tác trên mảng #include <stdio.h>void nhapmang( int a[] , int);

void duyetmang( int a[] , int); int main()

{ int a[100]; int n;

Trang 10

Ví dụ:

Tính tổng

Trang 11

Ví dụ

Đếm số lượng phần tử thỏa điều kiện

Trang 12

Ví dụ

Kỹ thuật đặt cờ hiệu

Ví dụ:Tìm số nguyên tố đầu tiên trong mảng

Trang 13

Ví dụ

Xóa phần tử tại vị trí k

Trang 14

Ví dụ:

Thêm một phần tử vào vị trí k

Trang 15

Ví dụ

Tìm kiếm phần tử x trong mảng

Giả sử có đủ vùng nhớ để gán a[n] = x; trước vòng lặp while

- > chuyện gì xảy ra?????

Trang 16

Ví dụ

Bài toán sắp xếp

Trang 17

Ví dụ

Trộn 2 mảng một chiều a, b các phần tử xen kẽ nhau thành một mảng một chiều (a, b

có thể có số phần tử khác nhau)

Trang 18

Ví dụ:

Sắp xếp các phần tử trên mảng sao cho các số dương tăng dần và các số âm giảm dần

Trang 19

Array: 2D-Array

Trang 20

Mảng 2 chiều

Trang 21

Gán giá trị

Trang 22

Nhập dữ liệu cho mảng 2 chiều

Ví dụ:

int ia[5][10];

Trang 23

In dữ liệu từ mảng 2 chiều

Trang 24

cout<<“nhap vao so dong”; cin>> m;

cout<<“nhap vao so cot”; cin>> n;

for(i =0; i<m;i++)

{

for(j=0; j<n; j++) {

cin>>a[i][j];

} }

}

Goi ham trong ham mainint main()

{int a[MAX][MAX];int n,m;

nhapmang(a,m,n);

return 0;

}

Trang 25

cout<<a[i][j] << “ ”;

} cout << endl; // in xuống dòng

nhapmang(a,m,n); xuatmang(a,m,n);

return 0;

}

Trang 26

Kỹ thuật đặt lính canh

Trang 27

Kỹ thuật đặt cờ hiệu

Trang 28

Sắp xếp

Trang 29

a)

Trang 30

b)

Trang 32

Đối với mảng, chỉ có thể lưu nhiều thông tin có cùng kiểu dữ liệu Nhưng với

structure ta có thể lưu thông tin như một mảng có nhiều kiểu dữ liệu khác nhau.

Trang 33

Cách khai báo biến có kiểu structure

Trang 34

Tham chiếu các phần tử trong structure

Trang 35

Ví dụ:

Trang 36

Khai báo biến cấu trúc:

hoso nv1;

Trang 38

/* Danh sach nhan vien */

snv[i].manv = atoi(ctam); // chuyen chuoi sang so

printf("Nhap vao ho ten: ");

gets(snv[i].hoten);

} //in danh sach nhan vien for(i = 0; i < in; i++)

printf("%5d %s\n", snv[i].manv, snv[i].hoten);

return 0;

}

Trang 39

Bài Tập

Ôn tập lại các bài tập vể function, array và struct trong môn học cơ sơ lập trình

Trang 40

Tạo ngẫu nhiên trong C/C++

▪ Hàm srand()

Cú pháp: void srand (unsigned int seed);

Dùng để khởi tạo một số ngẫu nhiên theo một số seed

Để cho mỗi số seed khác nhau người ta thường dùng kèm với unsigned int

time(NULL) trong thư viện time.h, hàm time(NULL) trả về số giây đã trôi qua kể từ

ngày 1/1/1970

▪ Hàm srand() thường được gọi trước khi gọi hàm rand()

Trang 41

Tạo ngẫu nhiên trong C/C++

▪ Hàm rand()

Cú pháp: int rand(void);

Trả về một số nguyên giả random trong khoảng từ 0 đến RAND_MAX

Hằng RAND_MAX được định nghĩa trong stdlib.h đảm bảo ít nhất bằng 32767

Nếu chỉ dùng hàm rand() thì sẽ cho ra những số random giống nhau mỗi lần chạy, vì

vậy người ta thường khai báo srand(time(NULL)) trước để kết quả random mỗi lần

mỗi khác nhau

Để lấy số ngẫu nhiên từ 0 đến n, ta sử dụng rand()%(n+1)

Để lấy số ngẫu nhiên từ a đến b, ta sử dụng a + rand()%(b-a+1)

Trang 42

Tạo ngẫu nhiên trong C/C++

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

int main(){

Trang 43

Câu hỏi

Phát sinh ngẫu nhiên mảng các số nguyên có K phần từ (100K  200) Yêu cầu cácphần tử được phát sinh ngẫu nhiên trong đoạn [1,10000]

Trang 44

Tạo ngẫu nhiên trong C/C++

▪ Tạo ngẫu nhiên Số thực:

Để lấy giá trị từ 0.0 to 1.0

float r = static_cast (rand()) / static_cast (RAND_MAX);

Trang 45

Tạo ngẫu nhiên trong C/C++

C code:

#include <stdio.h> /* printf, NULL */

#include <stdlib.h> /* srand, rand */

#include <time.h> /* time */

int main() {

srand (time(NULL)); // seed initialization for (int i = 0; i < 10; ++i)

{ float r = (float) (rand()) / (float) (RAND_MAX); printf("%f\n", r);

}

return 0;

}

Trang 46

Tạo ngẫu nhiên trong C/C++

C++ code

#include <iostream> /* std::cout, std::enld */

#include <stdlib.h> /* srand, rand */

#include <time.h> /* time */

int main() {

srand (time(NULL)); // seed initialization for (int i = 0; i < 10; ++i)

{ float r = static_cast <float> (rand()) / static_cast <float> (RAND_MAX); std::cout << r << std::endl;

}

return 0;

}

Trang 47

Sparse matrix vs Dense matrix

▪ Ma trận thưa (Sparse matrix) là loại ma trận có kích thước lớn nhưng phần lớn các

phần tử là 0

▪ Thực hiện tính tóa trên ma trận thưa, ta thường quan tâm đến không gian lưu trữ

và tốc độ tính toán sao cho tối ưu nhất

Trang 48

Sparse matrix - applications

Ví dụ: The NYC subway system

Trang 49

Sparse matrix - applications

Ví dụ: Computer vision – bài toán background subtraction

Trang 50

Sparse matrix - applications

Ví dụ: Computer vision – bài toán background subtraction (2)

Trang 51

Sparse matrix - applications

Ví dụ: Audio signal processing – baì toán lyric and music separation

Trang 52

Sparse matrix - applications

Ví dụ: Face analysis system – baì toán illumination normalization

Trang 53

Sparse matrix

▪ Lưu trữ ma trận thưa (có nhiều cách): chỉ lưu trữ thông tin của các phần tử khác 0Dùng Arrays

Dùng Linked Lists

DOK (Dictionary of keys)

LIL (List of lists)

COO (Coordinate list)

CSR (Compressed Sparse Row)

CSC (Compressed Sparse Column)

Trang 55

Sparse matrix

Dùng Linked Lists

* Sẽ được học trong môn

Cấu trúc dữ liệu và giải

thuật

Trang 56

Bài tập

Nhập ngẫu nhiên hai ma trận thưa kích thước NxN

A) Biễu diễn ma trận thưa bằng triples- (Row, Column, value)B) Tính tổng hai ma trận

C) Tìm ma trận chuyển vị

* Tìm hiểu thuật toán nhân nhanh hai ma trận thưa (option)

Ngày đăng: 15/05/2020, 22:53

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm