Câu 10: Kiểu dữ liệu.................là các số 0,1,...9, dấu cộng (+), dấu trừ (-), dấu phần trăm (%); mặc định căn lề..............
a. số, trái b. Số, phải c. Kí tự, trái d. Kí tự, phải
Hãy nhập câu hỏi của bạn vào đây, nếu là tài khoản VIP, bạn sẽ được ưu tiên trả lời.
program xau_so_hoc;
uses crt;
procedure xu_li;
var s, x, xau : string; i, tinh, j, f1, f2 : integer;
begin
write('nhap xau: '); readln(xau);
i:=1;
repeat
x:=''; s:='';
while (xau[i] in ['0'..'9']) and (i<=length(xau)) do
begin
x:=x+xau[i];
inc(i); {tim dau '+' hoac tru '-'/tim so truoc dau do}
end;
for j:=i+1 to length(xau) do
if xau[j] in ['0'..'9'] then s:=s+xau[j] else
break;
val(x,f1); val(s,f2); {chuyen doi xau thanh so};
if xau[i]='-' then
tinh:=tinh +(f1-f2) else
if xau[i] = '+' then
tinh:=tinh + (f1+f2);
{tinh toan voi xau va dau da tim duoc}
i:=j;
until i>=length(xau);
write('xau da tinh toan: ', tinh);
end;
{chuong trinh chinh}
begin
clrscr;
xu_li;
end.
có một số chỗ mình chú thích hơi sai
đại khái ý tưởng của mình là như này nè:
đầu tiên mình tìm dấu - hoặc + và tìm số đầu tiên trước dấu cộng hoặc trừ (vòng while đầu tiên), rồi tìm số sau dấu đó (vòng for sau đó).
rồi chuyển thành xâu, nếu - thì cộng biến với hiệu 2 số, nếu + thì mình cộng với hiệu hai số
lưu ý: vòng while chỉ dùng cho lần lập đầu tiên thôi, để tránh sai số những vòng repeat tiếp theo thì dùng vòng for để tìm số tiếp theo dấu vừa tìm được (số sau dấu vừa tìm được đã tìm ở vòng for lần lặp trước);
ví dụ để dễ mường tượng nè
1+1
i sẽ bằng 1 để tránh trường s[0] sẽ bị exit code
vòng repeat 1:
tìm được vị trí dấu + và số trước dấu + (vòng while);
tìm được số 1 (vòng for);
vòng for: sẽ được chạy từ giá trị của biến i+1 (do i đang ở vị trí của dấu vừa tìm được, không phải số nên nếu chạy từ i lúc cộng dồn sẽ là +1 chứ không phải là 1);
+ nếu như s[j] mà không phải số thì mình dừng vòng for lại (break)
đổi 2 số '1' thành kiểu số
biến 'tính' =0
tính:=tính + (1+1) ( vì đây là dấu +); => tính=2;
biến i sẽ bằng giá trị cuối của biến j nhận được
tức là bằng 3
mà 3 = độ dài của xâu nên vòng repeat dừng lại
vòng lặp của repeat chỉ có 1 vòng
B1: nếu đổi tất cả là dấu cộng ,ta có:
\(10+9+8+7+6+5+4+3+2+1=55\) (số lẻ)
B2: thay 1 số dấu \(+\) bằng 1 dấu \(-\)
khi thay dấu \(+\) trong \(a+b\) bằng dấu \(-\) ta được: \(a-b\).giá trị của biểu thức giảm đi: \(\left(a+b\right)-\left(a-b\right)=2b\)(số chẵn)
Do đó sau mỗi lần thay 1 dấu\(+\)bằng 1 dấu\(-\)thì kết quả giảm di 1 số chẵn nên kết quả luôn là số lẻ
Vậy không thể có cách nào để kết quả chia hết cho 2
Bạn ghép bốn số 9 thành hai số 99 sau đó bạn sẽ có phép tính 99 chia 99 cộng 9
Gọi phép xóa thêm 1 dấu (+) khi xóa 2 dấu (-) là phép xóa A.
Gọi phép xóa thêm 1 dấu (+) khi xóa 2 dấu (+) là phép xóa B.
Gọi phép xóa thêm 1 dấu (-) khi xóa 2 dấu khác nhau là phép xóa C .
=>Nhận xét : A làm tăng 1 (+) và giảm 2(-) .B làm giảm 1(+) .C làm giảm 1(+).
_Gọi số phép xóa A,B,C lần lượt là : x,y,z ,ta có :
x + y + z = 24 , 2.x nhỏ hơn hoặc bằng 15 , y + z - x nhỏ hơn hoặc bằng 10 .
=>(x + y + z ) - (y + z - x ) lớn hơn hoặc bằng 14 => 2.x lớn hơn hoặc bằng 14 .Vậy x = 7.
=> y + z = 17.
=> số lượng dấu (+) còn lại là : 10 - (y + z - x ) = 0 .
=> số lượng dấu (-) còn lại là : 15 - 2.x = 1 .
Vậy sau 24 phép xóa còn lại dấu (-).
Tích của 10 dấu cộng và 15 dấu trừ là âm
_Tích của hai dấu cùng âm hoặc cùng dương là dương nên thay hai dấu cùng âm (cùng dương) bằng dấu cộng thì tích các dấu trên bảng không thay đổi.(ở đây chỉ giá trị âm hay dương)
_Ngược lại, tích của hai dấu đối nhau là âm nên thay dấu trừ cho hai dấu đối chau thì lẽ dĩ nhiên, tích cũng không thay đổi.
_Có nghĩa là với mọi trường hợp xóa hai dấu và thay vào một dấu khác thì tích các dấu trên bảng cũng không thay đổi. Mặt khác, mỗi lần xóa và thay dấu mới, số lượng dấu trên bảng giảm đi một. Vậy sau 24 lần thực hiện như vậy, trên bảng chỉ còn lại một dấu duy nhất, dấu này có giá trị âm, vậy sẽ là dấu trừ.
Mình giải chính xác đi wá chớ>_<
a nha