Các bạn giúp mình 2 bài pascal này với 3/ VCT nhập vào dãy gồm n kí tự, cho biết dãy vừa nhập có bao nhiêu kí tự là 'a' Ví dụ: Nhap n = 3 Ki tu thu 1: a Ki tu thu 2: d Ki tu thu 3: a Day co 2 ki tu 'a' Bài 4: VCT nhập vào 2 số nguyên a và b. In ra màn hình các số nguyên trong đoạn từ a đến b, tính tổng tất cả các số nguyên âm trong đoạn từ a đến b Ví dụ: Nhap a = -2 Nhap b = 5 Cac so tu-2 den 5 la: -2 -1 0 1 2 3 4 5 Tong cac so nguyen am tu -2 den 5 la: -3
1 câu trả lời
Bài 3:
Kiểm tra số đối xứng trong VCT là một bài toán cơ bản nhằm giúp cho người học lập trình C++ có được các kiến thức về lập trình. Một số được gọi là số đối xứng nếu đọc từ trái qua phải(cách đọc thông thường) và đọc từ phải qua trái đều có giá trị như nhau.
Ví dụ số đối xứng: 1, 2, 3, 11, 121, 4994, …
Phân tích bài toán
Theo định nghĩa số đối xứng ở trên. Ta có một số nhận định sau:
- Số có 1 chữ số là số đối xứng
- Số có số lượng chữ số lẻ sẽ đối xứng qua số ở chính giữa. Như vậy, khi kiểm tra có thể bỏ qua số chính giữa
Có nhiều cách khác nhauđể kiểm tra số đối xứng.
Cách 1: Chứng minh sử dụng định nghĩa
Đảo ngược số ban đầu, kiểm tra số đảo ngược có bằng số ban đầu hay không.
Với cách này, bạn cần sử dụng toán tử chia nguyên / và chia dư % để thực hiện tính toán.
Đây cũng là cách mình sẽ cung cấp code ở phần tiếp theo.
Cách 2:
Coi số cần nhập là một chuỗi kiểu char[] hoặc kiểu string. Như vậy, ta cần kiểm tra từng ký tự ở nửa đầu có giống từng ký tự ở nửa cuối không?
Gọi n là chiều dài của chuỗi s.
Xét i < n/2, kiểm tra nếu tồn tại s[i] != s[n-i-1] thì đó không phải số đối xứng. Ngược lại, đó là số đối xứng.
Nhận xét:
- Cách thứ 2 sẽ khả thi ngay cả khi số bạn nhập vào có tới hàng triệu chữ số.
- Xét về tốc độ, cả 2 cách đều có cùng độ phức tạp tuyến tính.
BÀI 4:
VAR a:ARRAY[1..100] OF REAL; i,n,x,y:INTEGER; tongam,tongduong,tba,tbd:REAL; BEGIN clrscr; write('So phan tu cua day n= ');readln(n); FOR i:=1 TO n DO BEGIN write('Nhap phan tu a[',i,']: '); readln(a[i]); END; tongam:=0; x:=0; FOR i:=1 TO n DO IF a[i]<0 THEN BEGIN tongam:=tongam+a[i]; x:=x+1; END; tba:=tongam/x; write('TB cong cac so am la: ',tba:5:1); writeln; tongduong:=0; y:=0; FOR i:=1 TO n DO IF a[i]>0 THEN BEGIN tongduong:=tongduong+a[i]; y:=y+1; END; tbd:=tongduong/y; write('TB cong cac so duong la: ',tbd:5:1);
@phamhongson2022 cho mik 1 cảm ơn 5 sao và câu trả lời hay nhất nhé!
thank!