Dữ liệu của bài toán sẽ được biểu diễn lại dưới dạng các biến của chương trình thông qua các quy tắc xác định của ngôn ngữ lập trình NNLT cụ thể.. Còn đối với chương trình máy tính , mọi
Trang 1BÀI BÁO CÁO WEEK 03
I Sự chuyển đổi từ dữ liệu của bài toán thành dữ liệu của chương trình?
Dữ liệu của bài toán sẽ được biểu diễn lại dưới dạng các biến của chương trình thông qua các quy tắc xác định của ngôn ngữ lập trình (NNLT) cụ thể
Mọi vấn đề bài toán nào, dù rất đơn giản, đều ít nhiều dùng đến dữ liệu Không những thế, dữ liệu bài toán thường phong phú và đề cập đến nhiều loại đối tượng khác nhau trong thế giới thực
Còn đối với chương trình máy tính , mọi dữ liệu của chương trình đếu nằm ở các biến Như vậy, so với cách biểu diễn dữ liệu ở thế giới thực, cách biểu diễn dữ liệu của máy tính hạn chế hơn rất nhiều nên khi giải bài toán trên máy tính người ta thường biến đổi lại dữ liệu của bài toán để phù hợp với cách biểu diễn trong máy tính
1 Biến (Variable)
a Khái niệm
Biến là nơi lưu trữ giá trị-số nguyên, số thực, kí tự,…
Một biến chỉ có thể lưu được một loại giá trị nhất định kiểu dữ liệu của biến
Giá trị mà biến đang lưu trữ có thể bị thay đổi nhiều lần trong quá trình chương trình thi hành
Một biến bất kì trong máy tính có 3 thuộc tính:
Tên biến (được đặt tên do người lập trình – gọi là định danh – indentifier)
Kiểu dữ liệu của biến
Gía trị hiện tại mà biến đang lưu trữ
Biến cần phải được khai báo (định nghĩa) trước khi sử dụng
Lưu ý:
Ý nghĩa của biến chỉ được hiểu bởi con người, không có ý nghĩa với PC;
Tên biến cần gợi nhớ và thống nhất;
Tên biến phải hợp lệ - tuân thủ theo quy ước của NNLT
b Khai báo biến
Mọi biến trong chương trình cần được khai báo trước khi sử dụng Khai báo biến
là dặt tên cho biến và xác định kiểu biến
Cú pháp khai báo:
Pascal: <tên1>[,<tên2>,…,<tênN>]: <kiểu>;
C: <kiểu> <tên1>[,<tên2>,…,<tênN>];
Trong đó:
<tên1>,<tên2>,…,<tênN> là tên các biến cần khai báo
<kiểu> là kiểu cảu các biến cần khai báo
Trang 2Lưu ý: Ngôn ngữ C phân biệt cữ hoa chữ thường còn Pascal thì không có đặt tính này
Nghĩa là, với Pascal khi khai báo 3 biến Var1, VAR1, VAr1 thì sẽ bị lỗi vì tên biến trùng nhau; Còn với C, Var1, VAR1, VAr1 là 3 biến hoàn toàn khác nhau
2 Kiểu dữ liệu (Data type)
Trong NNLT, loại giá trị mà biếu lưu trữ được phân thành những kiểu dữ liệu khác nhau
Thông thường, trong NNLT có các kiểu dữ liệu sau:
Kiểu dữ liệu số: gồm 2 loại
o Kiểu dữ liệu số nguyên
o Kiểu dữ liệu số thực
Kiểu luận lý (logic)
Kiểu kí tự
Kiểu chuổi kí tự
Mỗi kiểu có một miền giá tri khác nhau
a Kiểu số nguyên
Có nhiều kiểu số nguyên
Tùy thuộc vào độ lớn của miền giá trị, có:
o Số nguyên 8 bit (1 byte) Loại có dấu: -128 127 Loại không dấu: 0 255
o Số nguyên 16 bit (2 byte) Loại có dấu: -32,768 32,767 Loại không dấu: 0 65,535
o Số nguyên 32 bit (4 byte) Loại có dấu: -2,147,483,648 2,147,483,647 Loại không dấu: 0 4,2944,969,295
Một số NNLT còn hỗ trợ kiểu số nguyên 64 bit, 128 bit
Kiểu số nguyên k bit sẽ chiếm k bit dữ liệu
b Kiểu số thực
Có 2 dạng thường gặp
Số thực 32 bit (4 byte)
Số thực 64 bit ( 8 byte)
Một số NNLT cón hỗ trợ số thực 80 bit (10 byte)
c Các kiểu dữ liệu khác
Kiểu luận lý (logic): chỉ nhận 1 trong 2 giá trị - True (1) hoặc False (0)
Kiểu kí tự: dùng để lưu trữ dữ liệu ở dạng một kí tự - là một trong các kí hiệu của bảng mã ASCII, chiếm 1 byte bộ nhớ (một số NNLT cho phép lưu trữ kí tự mã Unicode chiếm 2 byte bộ nhớ)
Kiểu chuỗi kí tự: dùng để lưu trữ 1 chuỗi kí tự
Trang 3Loại Pascal Miền giá trị C Miền giá trị Logic Booleean True/False int 1/0
Kí tự Char 256 kí tự char 256 kí tự
Chuỗi String[n] n kí tự, mỗi kí tự 1 byte char[n] n kí tự, mỗi kí tự 1 byte
Lưu ý:
Mọi kiểu dữ liệu dạng số đều hữu hạn và rời rạc
Hiểu biết cách biểu diễn số nguyên, số thực trongv máy tính
Chọn lựa kiểu dữ liệu niến sao co phù hợp
3 Hằng (constant)_ phương tiện làm rõ chương trình
Hằng trong chương trình là một loại giá trị không đổi trong suốt quá trình thi hành
Mục đích của hằng là giúp cho chương trình dễ hiểu hơn, hoặc điều chỉnh chương trình dễ dàng hơn
Hắng phải được khai báo trước khi sử dụng
Hắng gồm hai thành phần: tên hằng và giá trị gán cho hằng
Có các loại hằng sau:
Hằng số: hằng nguyên, hằng thực- Vd: 2, -8, 30, 2.5, -2.0, 1E-3,…
Hằng bool: có hai gí trị là True v1 False
Hằng kí tự: có hai dạng biểu diễn sau:
Đặt kí tự trong dấu nháy đơn Dùng mã ASCII
Hằng chuỗi kí tự:
Pascal , đặt chỗi kí tự trong dấu nháy đơn
C, đặt chuỗi kí tự trong dấu nháy kép
4 Lệnh gán (Assignment)-phương tiện làm thay đổi giá trị của biến
Lệnh gán dùng để thay đổi gí trị hiện thời của biến
Lện gán không phải là phép so sánh giữa hai biểu thức, mà là thao tác tính kết quả biểu thức phía bên phải lệnh gán, sau đó đặt kết quả này vào phía bên trái lệnh gán
Lệnh gán làm thay đổi giá trị hiện thời biến và không thể nào lấy lại được giá trị này
Biểu diễn bằng lưu đồ: A B
Ý nghĩa: đưa giá trị biểu thức bên phải (B) gán vào cho biến ở vế trái (A)
Trang 4Cú pháp:
Pascal <indentifier> := <expression>;
C <indentifier> = <expression>;
5 Câu lệnh xuất / nhập
PASCAL:
Readln(arg1,arg2,…,argn);
Read(arg1,arg2,…,argn);
Lệnh Readln sau khi gán xong cho tất cả các biến trong danh sách, con trỏ sẽ chyển sang đấu dòng kế tiếp Còn lệnh Read thì không chuyển
Lệnh Read không tham số dùng để chờ người dùng nhấn phím enter
Writeln(arg1,arg2,…,argn);
Write(arg1,arg2,…,argn);
Sau khi thực hiện lệnh Writeln,con trỏ sẽ được chuyển sang đầu dòng kế tiếp Lệnh Write thì không chuyển
Lệnh Writeln không tham số dùng để chuyển con trỏ sang dòng kế tiếp
C:
scanf(control string,arg1,arg2,…,argn);
printf(control string, arg1,arg2,…,argn);
6 Chương trình ở gốc độ người lập trình và gốc độ người sử dụng
Gốc độ người lập trình thì hiểu biến là vùng bộ nhớ có cấu trúc được mô tả bởi một kiểu dữ liệu kiểu dữ liệu là cấu trúc dữ liệu được định nghĩa
Gốc độ người sử dụng thì chỉ hiểu được cách biểu diễn thông tin trong thế giới thực và kiểu
dữ liệu là cách biểu diễn loại thông tin trong thế gới thực
II Thủ tục / hàm dựng sẵn trong NNLT có mục đích gì?
Thủ tục và hàm trong NNLT có mục đích giúp cho người lập trình dễ dàng hơn khi thực hiện viết một chương trình nào đó Nhờ có thủ tục và hàm dựng sẵn nên các chương trình có một tính thống nhất chung về cú pháp nên dễ dàng trao đôi thông tin qua lại
III Bài tập thực hành handout02 phần nâng cao
1 Bài 1: Nhập vào hai số nguyên a và b có đủ 3 chữ số Trình bày phép nhân a x b
ra màn hình
Bước 1: Xác định bài toán:
Input: Hai số nguyên a và b có 3 chữ số
Output: Trình bày phép nhân a x b ra màn hình
Trang 5Bước 2: Phân tích:
Thành phần dữ liệu: a,b: số nguyên;
Thành phần sử lý:
b chia 100, lấy phần dư
Lấy phần dư chia cho 10;
Bước 3: Thiết kế:
Đơn vị dữ liệu: a,b:int;
Đơn vị xử lý:
B1: nhập hai số a và b;
B2: Phân tích số b thành 3 số riêng biệt:
c←b/100;
t←b%100;
d←t/10;
e←t%10;
B3: thực hiện phép nhân:
g←e*a;
h←d*a;
j←c*a;
k←a*b;
B4: xuất ra phép axb,kết thúc
Thuật toán:
Trang 6Bước 4: Cài đặt: Viết chương trình bằng ngôn ngữ C
#include “stdio.h”
#include “conio.h”
#include “math.h”
void main()
{
long a,b,c,t,d,e,g,h,j,k;
printf(“nhap vao hai so a va b co du 3 chu so: “);
scanf(“%ld%ld”,&a,&b);
c←b/100;
t←b%100;
d←t/10;
e←t%10;
g←e*a;
h←d*a;
j←c*a;
k←a*b;
printf(“thuc hien phep nhan a va b”);
printf(“%8ld\n”,a);
printf(“*\n”);
printf(“%8ld\n”,b);
printf(“ _ _ _ _ _ _\n”):
printf(“%8ld\n”,g);
printf(“%7ld\n”,h);
printf(“%6ld\n”,j);
printf(“_ _ _ _ _ _ _ _\n”);
printf(“%8ld”,k);
getch();
}
Trang 72 Bài 2: Nhập vào số nguyên x và xuất ra màn hình kết quả
1 +
1 +1 +
Bước 1: Xác định bài toán:
Input: số nguyên x Output: Kết quả biểu thức trên
Bước 2: Phân tích:
Thành phần dữ liệu: x:số nguyên; ketqua:số thực;
Thành phần xử lý: viết biểu thức
Bước 3: thiết kế
Đơn vị dữ liệu: x:int;
ketqua: float;
Thuật toán:
B1: nhập số nguyên x
B2: ketqua←x*x/(1+(x*x/(1+(x*x/(1+x*x)))))
B3: xuất ketqua và kết thúc
Trang 8Bước 4: Cài đặt: chương trình được việt bằng ngôn ngữ C
#include “stdio.h”
#include “conio.h”
#include “math.h”
void main()
{
float x,ketqua;
printf(“nhap vao so nguyen x: “);
scanf(“%d”,&x);
ketqua=pow(x)/(1+(pow(x)/(1+(pow(x)/(1+pow(x))))));
printf(“ket qua bieu thuc la: %.4f”,ketqua);
getch();
}
Trang 93 Bài 3: Nhập vào hai số nguyên x và y Xuất ra màn hình kết qua sau:
3 + ( + )
Bước 1: Xác định bài toán:
Input: Hai số nguyên a và b Output: Xuất ra kết quả biểu thức trên
Bước 2: Phân tích
Thành phần dữ liệu: x,y:int; ketqua:double;
Thành phẩn xử lý: viết biểu thức
Bước 3: Thiết kế:
Đơn vị dữ liệu: x,y, ketqua:double;
Thuật toán:
B1: nhập vào hai số nguyên x và y;
B2: ketqua←sqrt((1+x*x+y*y))/(3+(x+y)*(x+y));
B3: xuất ra ketqua; kết thúc;
Trang 10Bước 4: Cài đặt: Chương trình được viết bằng ngôn ngữ C;
#include “stdio.h”
#include “conio.h”
#include “math.h”
void main()
{
double x,y,ketqua;
printf(“nhap vao hai so nguyen x va y: “);
scanf(“%%lf%lf”,&x,&y);
ketqua=sqrt(1+pow(x,2)+pow(y,2))/(3+pow((x+y),2));
printf(“ket qua cua bieu thuc la: %lf “,ketqua);
getch();
}